本地变量auto int a和int a之间有什么区别?

13

存储类别标识符 auto 的使用场景?我理解所有局部变量默认都是 auto 类型。但显式地写出 auto int a 有什么不同之处?


可能是Where is the C auto keyword used?的重复问题。 - Ciro Santilli OurBigBook.com
4个回答

12

没有任何区别。

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

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

等价。

通常的做法是不加auto关键字。


我在任何地方都能找到这个,那么auto关键字就没有特殊的意义。 - vkesh
1
@vkesh 对于C语言来说,这是正确的。 "auto" 的意思是 "非 static",这是默认值。它在其前身B中具有更大的影响力。http://en.wikipedia.org/wiki/B_(programming_language) - Drew Dormann
它们是等价的还是完全相同的? - Sam

3

有两种可能的情况:

  1. auto是默认值,显式添加这个关键字不起作用
  2. auto不被允许(例如全局变量),在这种情况下添加auto会导致代码无法编译

你的第二种可能情况是指如果我们在全局变量中添加auto关键字,会防止全局变量被定义吗??如果是这样的话,如果你知道任何用例,请告诉我。 - vkesh
1
@vkesh:我的意思是,如果你尝试为全局变量指定“auto”,代码将无法编译(使用正常运行的编译器)。至于“用例”是什么,我的观点是没有。 - Jerry Coffin

3
在现代C语言(C89、C99、C11)中,“auto”关键字是多余的。除了明确意图(“这是一个非静态变量,我是认真的!”)外,它已经不再有任何用途了。它是C历史的残留物,从B语言延续下来,但像“entry”关键字一样,已经基本过时了。
我一生中只用过它一次。那是在一个IOCCC条目中与隐式int一起使用:
 drive () { auto motive; ... }

1

本地变量和自动变量之间有一点不同。

我们可以将本地变量 int a=20; 变成任何存储类变量,例如 auto int a=20;static int a=20;,但是一旦我们将任何变量指定为 auto,例如 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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接