-1

正如我们所知,变量的外部声明可以被初始化。

#include<stdio.h>

extern int a=5; //will work as both definition and declaration.
int main()
{

}

为什么这个程序编译和运行没有错误。

extern int a=5; //will work as both definition and declaration.
int main()
{

}

int a; // isn't it second definition??
4

1 回答 1

4

C 有一个“暂定定义”的概念。大多数没有初始化器的定义都是“暂定的”,因此允许任意数量的定义,只要它们不相互冲突。在翻译单元的末尾,变量的定义基本上变成了这些的组合(例如,如果一个定义说变量是const,而另一个定义说它是volatile,则变量最终将成为两者constvolatile

带有初始值设定项的定义绝不是试探性的,因此只允许其中一个。

于 2013-04-29T17:30:15.550 回答