內容X.c
:多重聲明和定義
Y.c
int i;
main()
{
fun();
}
:
int i;
fun()
{
}
爲什麼這兩個文件編譯沒有錯誤? (使用GCC)
但是,如果我使用int i = 10;
它打印多重定義錯誤。
內容X.c
:多重聲明和定義
Y.c
int i;
main()
{
fun();
}
:
int i;
fun()
{
}
爲什麼這兩個文件編譯沒有錯誤? (使用GCC)
但是,如果我使用int i = 10;
它打印多重定義錯誤。
您可能對此問題和答案感興趣。關鍵詞:「暫定義」。
假設你真的想要一個獨立變量叫我在每一個這兩個文件,你需要爲了與static
前綴他們,給他們internal linkage.
static int i = 10;
如果你想我在兩個文件中都是相同的變量,所以一個文件中的變化會影響另一個文件,當你問這個問題的一個變體時,使用你的答案是given 3 hours ago。如果要共享,則需要在一個地方定義變量。
至於爲什麼它沒有在沒有init的情況下沒有導致錯誤,我認爲這是因爲在你需要初始化並且編譯器忽略它之前你沒有使用這個變量。
[c&C++默認全局變量鏈接,多重聲明和定義問題]的可能重複(http://stackoverflow.com/questions/6371048/cc-default-global-variable-linkage-multiple-declaration-definition- probl) – legends2k 2014-03-03 12:00:43