12

存储类标识符 auto 的用例?我知道默认情况下所有局部变量都是自动的。但是通过显式编写 auto int a 有什么不同?

4

4 回答 4

11

严格来说没有区别。

{
   auto int a;
   /* ... */
}

{
   int a;
   /* ... */   
}

是等价的。

通常的做法是不放置说明auto符。

于 2013-03-29T14:58:51.493 回答
2

有两种可能的情况:

  1. auto是默认值,显式添加关键字没有任何作用
  2. 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;那么它将永远不会变成其他存储类,例如staticorregister等​​等。我们不能像这样写。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 回答