我们知道可以初始化外部变量声明。
#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??
答案 0 :(得分:4)
C具有“暂定”的概念。没有初始化程序的大多数定义都是“暂定的”,因此只要它们不相互冲突,就允许任意数量的定义。在翻译单元的末尾,变量的定义基本上是这些变量的组合(例如,如果一个定义表示变量是const
而另一个定义表示变量volatile
,变量最终将变为const
和volatile
。
使用初始化程序的定义绝不是暂定的,因此只允许其中一个定义。