存储类标识符 auto 的用例?我知道默认情况下所有局部变量都是自动的。但是通过显式编写 auto int a 有什么不同?
问问题
9606 次
4 回答
11
严格来说没有区别。
{
auto int a;
/* ... */
}
和
{
int a;
/* ... */
}
是等价的。
通常的做法是不放置说明auto
符。
于 2013-03-29T14:58:51.493 回答
2
有两种可能的情况:
auto
是默认值,显式添加关键字没有任何作用auto
不允许(例如,在全局变量上),在这种情况下添加会auto
阻止代码编译
于 2013-03-29T15:01:36.670 回答
2
在现代 C(C89、C99、C11)中,auto
关键字是多余的。除了明确意图(“这是一个非静态变量,我是认真的!”)之外,它不再有任何用途。它是 C 历史的残余,从 B 继承而来,但很像entry
关键字实际上已经过时了。
我一生中使用过一次。它与隐式 int 一起位于 IOCCC 条目中:
drive () { auto motive; ... }
于 2013-03-29T15:13:37.483 回答
0
局部变量和自动变量之间有一点点区别。
我们可以
int a=20;
为任何存储类变量创建局部变量,例如auto int a=20;
orstatic int a=20;
但是一旦我们将任何变量指定为 auto ,auto int a=20;
那么它将永远不会变成其他存储类,例如static
orregister
等等。我们不能像这样写。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;
}
于 2018-11-13T06:30:19.570 回答