在file1.cc我寫不同的文件有不同的範圍嗎?
int i = 0;
而在file2.cc我寫
#include <iostream>
int i = 1;
int main()
{
std::cout<< i << std::endl;
return 0;
}
在MacOS的編譯器報告
duplicate symbol _i in:
/var/folders/wn/q9648wb507j9l504vp2d_dwm0000gn/T/file1-bb8eca.o
/var/folders/wn/q9648wb507j9l504vp2d_dwm0000gn/T/file2-b5e667.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
不過是不是不同的文件有他們的不同範圍,以便我們可以在file2中定義一個全局變量,其名稱與file1中的名稱相同? 此外,如果不同的文件在同一範圍內,那麼爲什麼是非法的,因爲變換file2.cc:
#include <iostream>
int main()
{
std::cout<< i <<std::endl;
return 0;
}
如果你希望你的全局變量有內部鏈接(即只內,只在定義文件中可見) - 它們標記爲'static',或者把它們放在匿名'namespace'。 –
你應該在file2.cc中有「extern i」 – Aram
全局變量是** global ** - 它隨處可用。 –