了解 C 和 C++ 中的暂定定义

Understanding tentative definitions in C and C++

我知道暂定定义是这样的

int i;
int i;

并且它们在链接时合并 真正的定义就像

int i=5;

只用过一次,但是代码中有很多暂定定义有什么意义(为什么要声明两次?)
以及为什么重复的暂定定义在 C++ 中出错,而在 C

中工作正常

因为C++没有暂定定义。那是C++没有的C语言特性

所以当你写 int i; 时,那是 一个真正的定义 (没有附加初始化程序)。根据一个定义规则,您只能有一个定义 (!)。

至于为什么您 想要 在 C 中使用它们的示例,老实说我想不出一个。也许这就是 C++ 不费心的原因!

请注意,您仍然可以声明 任意多次。对于对象,您需要使用 extern 来表示此意图:

extern int x;
extern int x;
extern int x;

int x = 0;