이 프로그램을 g ++ 및 clang ++로 컴파일합니다. 차이점은 다음과 같습니다.
g ++는 1을 인쇄하지만 clang ++는 2를 인쇄합니다.
g ++ : extern varible은 가장 짧은 범위에서 정의 된
것 같습니다
.
clang ++ : extern varible은 가장 짧은 전역 범위에서 정의됩니다.
C ++ 사양에 대한 사양이 있습니까?
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;
버전 : g ++ : 7.4.0 / clang ++ : 10.0.0
컴파일 : $ (CXX) main.cpp other.cpp -o extern.exe
MSVC
하고 clang-cl
(둘 다 제공 2
), 둘 다 extern int i
완전히 무시한 것 같습니다 . other.cpp
파일에 링크하지 않아도 프로그램이 빌드되고 실행됩니다.
i
가 없으므로 시도하지 않습니다.