Saya mengkompilasi program ini dengan g ++ dan clang ++. Ada perbedaan:
g ++ mencetak 1, tetapi dentang ++ mencetak 2.
Tampaknya
g ++: extern varible didefinisikan dalam lingkup terpendek.
dentang ++: variabel ekstern didefinisikan dalam ruang lingkup global terpendek.
Apakah spesifikasi C ++ memiliki spesifikasi tentang itu?
main.cpp
#include <iostream>
static int i;
static int *p = &i;
int main() {
int i;
{
extern int i;
i = 1;
*p = 2;
std::cout << i << std::endl;
}
}
other.cpp
int i;
versi: g ++: 7.4.0 / clang ++:
kompilasi 10.0.0 : $ (CXX) main.cpp other.cpp -o extern.exe
MSVCdan clang-cl(keduanya memberi 2), tampaknya extern int ibenar-benar diabaikan oleh keduanya: bahkan jika saya tidak menautkan dalam other.cppfile, program membangun dan berjalan.
i, itu tidak mencoba.