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
MSVC
dan clang-cl
(keduanya memberi 2
), tampaknya extern int i
benar-benar diabaikan oleh keduanya: bahkan jika saya tidak menautkan dalam other.cpp
file, program membangun dan berjalan.
i
, itu tidak mencoba.