了解 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;
我知道暂定定义是这样的
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;