存储类标识符auto的用例?我知道默认情况下所有局部变量都是auto。但是,通过明确写入auto int a会有什么不同?
答案 0 :(得分:11)
严格没有区别。
{
auto int a;
/* ... */
}
和
{
int a;
/* ... */
}
是等价的。
通常的做法是不要使用auto
说明符。
答案 1 :(得分:2)
有两种可能的情况:
auto
是默认设置,并且明确添加关键字不会产生任何结果auto
(例如,在全局变量上),在这种情况下添加auto
会阻止代码编译答案 2 :(得分:2)
在现代C(C89,C99,C11)中,auto
关键字是多余的。除了使意图明确(“这是一个非静态变量,我的意思是它!”)之外,它不再具有任何目的。它是C历史的残余,从B继承而来,但很像entry
关键字已经过时了。
我生命中曾经使用过一次。它与IOCCC条目结合使用了隐式int:
drive () { auto motive; ... }
答案 3 :(得分:0)
局部变量和自动变量之间几乎没有差异。
我们可以将局部变量
int a=20;
设置为任何存储类变量 类似于auto int a=20;
或static int a=20;
,但当我们指定 任何像auto int a=20;
这样的变量都会自动变为 其他存储类,例如static
或register
等,我们无法编写 像static auto int 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;
}