Compilo questo programma con g ++ e clang ++. C'è una differenza:
g ++ stampa 1, ma clang ++ stampa 2.
Sembra che
g ++: la variabile esterna sia definita nell'ambito più breve.
clang ++: la variabile extern è definita nell'ambito globale più breve.
La specifica C ++ ha qualche specifica al riguardo?
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;
versione: g ++: 7.4.0 / clang ++:
compilazione 10.0.0 : $ (CXX) main.cpp other.cpp -o extern.exe
MSVC
e clang-cl
(entrambi danno 2
), sembra che extern int i
sia completamente ignorato da entrambi: anche se non mi collego al other.cpp
file, il programma viene compilato ed eseguito.
i
, non ci prova.