多个声明和定义

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相关联。

这是假设您将这些文件与彼此链接,这在您的解释中并不完全清楚。