存储类别标识符 auto 的使用场景?我理解所有局部变量默认都是 auto 类型。但显式地写出 auto int a 有什么不同之处?
存储类别标识符 auto 的使用场景?我理解所有局部变量默认都是 auto 类型。但显式地写出 auto int a 有什么不同之处?
没有任何区别。
{
auto int a;
/* ... */
}
和
{
int a;
/* ... */
}
等价。
通常的做法是不加auto
关键字。
auto
" 的意思是 "非 static
",这是默认值。它在其前身B中具有更大的影响力。http://en.wikipedia.org/wiki/B_(programming_language) - Drew Dormann有两种可能的情况:
auto
是默认值,显式添加这个关键字不起作用auto
不被允许(例如全局变量),在这种情况下添加auto
会导致代码无法编译 drive () { auto motive; ... }
本地变量和自动变量之间有一点不同。
我们可以将本地变量
int a=20;
变成任何存储类变量,例如auto int a=20;
或static int a=20;
,但是一旦我们将任何变量指定为auto
,例如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;
}