局部变量auto int a和int a有什么区别?

时间:2013-03-29 14:57:46

标签: c

存储类标识符auto的用例?我知道默认情况下所有局部变量都是auto。但是,通过明确写入auto int a会有什么不同?

4 个答案:

答案 0 :(得分:11)

严格没有区别。

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

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

是等价的。

通常的做法是不要使用auto说明符。

答案 1 :(得分:2)

有两种可能的情况:

  1. auto是默认设置,并且明确添加关键字不会产生任何结果
  2. 不允许
  3. 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;这样的变量都会自动变为   其他存储类,例如staticregister等,我们无法编写   像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;
}