C 局部变量auto int a和int a之间有什么区别?
存储类标识符auto的用例?我知道默认情况下所有局部变量都是自动的。但是显式地写auto int a有什么区别呢 严格说来没有区别C 局部变量auto int a和int a之间有什么区别?,c,C,存储类标识符auto的用例?我知道默认情况下所有局部变量都是自动的。但是显式地写auto int a有什么区别呢 严格说来没有区别 { auto int a; /* ... */ } 及 它们是等价的 通常的做法是不将自动说明符置于指定位置。有两种可能的情况: auto是默认值,显式添加关键字不会产生任何效果 不允许使用auto(例如,在全局变量上),在这种情况下,添加auto会阻止代码编译 在现代的C语言(C89、C99、C11)中,auto关键字是多余的。除了使意图显式(“这是
{
auto int a;
/* ... */
}
及
它们是等价的
通常的做法是不将
自动
说明符置于指定位置。有两种可能的情况:
auto
是默认值,显式添加关键字不会产生任何效果auto
(例如,在全局变量上),在这种情况下,添加auto
会阻止代码编译auto
关键字是多余的。除了使意图显式(“这是一个非静态变量,我是认真的!”),它不再有任何用途。它是C历史的残余,从B继承而来,但很像entry
关键字实际上已经过时了
我一生中用过一次。它与隐式int一起位于IOCCC条目中:
drive () { auto motive; ... }
局部变量和自动变量之间的差别很小
#include<stdio.h>
int fun()
{
auto int a=20;
printf("%d\n",a);
a++;
return 0;
}
int main()
{
fun();
fun();
return 0;
}
#include<stdio.h>
int fun()
{
int a=20;
printf("%d\n",a);
a++;
return 0;
}
int main()
{
fun();
fun();
return 0;
}
我们可以使局部变量inta=20代码>到任何存储类变量
像autointa=20代码>或静态int a=20代码>但当我们指定
任何与自动相似的变量auto int a=20代码>那么它将永远不会成为
其他存储类,如静态
或寄存器
等,我们无法写入
如静态自动积分a=20代码>。其他内容与堆栈段中的内存完全相同。下面是生成相同输出的自动变量示例
用于自动变量
#include<stdio.h>
int fun()
{
auto int a=20;
printf("%d\n",a);
a++;
return 0;
}
int main()
{
fun();
fun();
return 0;
}
#include<stdio.h>
int fun()
{
int a=20;
printf("%d\n",a);
a++;
return 0;
}
int main()
{
fun();
fun();
return 0;
}
#包括
int fun()
{
自动积分a=20;
printf(“%d\n”,a);
a++;
返回0;
}
int main()
{
乐趣();
乐趣();
返回0;
}
对于局部变量
#include<stdio.h>
int fun()
{
auto int a=20;
printf("%d\n",a);
a++;
return 0;
}
int main()
{
fun();
fun();
return 0;
}
#include<stdio.h>
int fun()
{
int a=20;
printf("%d\n",a);
a++;
return 0;
}
int main()
{
fun();
fun();
return 0;
}
#包括
int fun()
{
INTA=20;
printf(“%d\n”,a);
a++;
返回0;
}
int main()
{
乐趣();
乐趣();
返回0;
}
我到处都能找到,这意味着auto关键字没有特殊意义。@vkesh这对C是正确的。“auto
”意味着“notstatic
”,这是默认值。它在其前身B中有更大的影响。它们是等效的还是完全相同的?您的意思是第二种可能的情况,即如果我们将自动添加到全局变量,则会阻止定义全局变量??如果是这样的话,如果你知道什么,那用例是什么?@vkesh:我的意思是,如果你试图为一个全局变量指定auto
,那么代码将无法编译(无论如何,使用一个功能正常的编译器)。至于“什么是用例”,我的观点是没有。可能的重复