Ich kompiliere dieses Programm mit g ++ und clang ++. Es gibt einen Unterschied:
g ++ druckt 1, aber clang ++ druckt 2.
Es scheint, dass
g ++: die externe Variable im kürzesten Bereich definiert ist.
clang ++: Die externe Variable wird im kürzesten globalen Bereich definiert.
Hat die C ++ - Spezifikation eine Spezifikation dazu?
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;
version: g ++: 7.4.0 / clang ++: 10.0.0
kompilierung: $ (CXX) main.cpp other.cpp -o extern.exe
MSVC
und clang-cl
(beide geben 2
) herumspielen, scheint das extern int i
von beiden völlig ignoriert zu werden: Auch wenn ich die other.cpp
Datei nicht verlinke , wird das Programm erstellt und ausgeführt.
i
nicht auflösen muss.