X.c
的内容:
int i;
main ()
{
fun ();
}
Y.c
的内容:
int i;
fun ()
{
}
为什么这两个文件编译没有错误? (使用GCC)
但如果我使用int i = 10;
,则会输出多重定义错误。
答案 0 :(得分:3)
您可能对此问题和答案感兴趣。关键词:“暂定”。
答案 1 :(得分:1)
假设您确实需要在这两个文件的每个文件中都使用名为i的独立变量,则需要在static
前加上static int i = 10;
,以便为它们internal linkage.
{{1}}
如果您希望我在两个文件中都是相同的变量,那么一个中的更改会影响另一个,当您询问问题的变体时,请使用您given 3 hours ago的答案。如果要共享,则需要在一个地方定义变量。
至于为什么没有初始化它不会导致错误,我认为这是因为你没有使用变量,直到它需要初始化,所以编译器忽略它。
答案 2 :(得分:-1)
因为声明和定义之间存在差异。 int i;
只会引入一个名字。另一方面,int i = 10;
定义i
,因此,必须保留存储器中的位置以存储它对应的值。但编译器无法知道哪个值对应i
,因为您希望将两个内存位置与名称i
相关联。
这是假设您将这些文件与其他文件相关联,这在您的解释中并不完全清楚。