变量的双重定义

时间:2013-04-29 17:26:33

标签: c

我们知道可以初始化外部变量声明。

#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??

1 个答案:

答案 0 :(得分:4)

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

使用初始化程序的定义绝不是暂定的,因此只允许其中一个定义。