多个声明和定义
Xc
内容:
int i; main () { fun (); }
Yc
内容:
int i; fun () { }
为什么这两个文件编译没有错误? (使用GCC)
但如果我使用int i = 10;
它打印出多重定义错误。
您可能对这个问题和答案感兴趣。 关键词:“暂定”。
C99中的暂定定义和链接
假设你真的想要在这两个文件中的每一个中都有一个名为i的独立变量,你需要在它们前面加上static
,以便为它们提供内部链接。
static int i = 10;
如果你希望我在两个文件中都是同一个变量,那么一个变量会影响另一个变量,请使用3个小时前你提出问题变体的答案。 如果要共享,则需要在一个位置定义变量。
至于为什么没有init它没有导致错误,我认为这是因为你没有使用变量,直到它需要初始化,所以编译器忽略它。
因为声明和定义之间存在差异。 int i;
只是引入一个名字。 int i = 10;
另一方面,定义i
,因此,必须保留存储器中的位置以存储它对应的值。 但是编译器不可能知道哪个值对应于i
因为您希望将两个内存位置与名称i
相关联。
这是假设您将这些文件与彼此链接,这在您的解释中并不完全清楚。