В 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)
Но не так, что разные файлы имеют их различные области, так что мы можем определить глобальную переменную в файле2 с тем же именем, что и в файле1? Кроме того, если различные файлы находятся в той же области, то почему это незаконно, чтобы превратить file2.cc как:
#include <iostream>
int main()
{
std::cout<< i <<std::endl;
return 0;
}
Если вы хотите, чтобы ваши глобальные переменные имели внутреннюю связь (то есть быть видимыми только в пределах файла, в котором они определены) - пометьте их как «статические» или поместите их в анонимное пространство имен. –
вы должны иметь «extern i» в файле2.cc – Aram
Глобальная переменная ** global ** - она доступна везде. –