gcc 이름 맹 글링 규칙에 대한 이해를 돕는 사람이 있습니까?글로벌 const 변수의 G ++ 이름 맹 글링
는 다음 테스트 코드를 고려
#include <stdio.h>
const int x = 42;
int y = 42;
int main(int argc, const char* argv[])
{
return 0;
}
나는 다음 (놀라운?) 결과를 얻을 수 nm
을 실행 :
0000000000000000 T main
0000000000000000 D y
0000000000000000 r _ZL1x
이 컴파일러에만 읽기 전용에 배치 전역 변수를 엉망으로 보여줍니다 섹션. 컴파일러에서 전역 변수를 모두 또는 전역으로 변경하려고합니다.
이것은 의도 한 동작입니까? 나를 위해 그것이 모순 보인다.
C 또는 C++로 컴파일 하시겠습니까? 또한'x'는 암시 적으로'static' (적어도 C++에서는) 인 반면,'y'는 암묵적으로'static'입니다. – Angew
암시 적으로'정적'은 정말로? 즉, 두 개의 다른 컴파일 단위에서 'x'의 보이는 주소가 다를 것입니다. 와우. 알아 둘만한. 다행히도 C는 이와 같은 게임을하지 않습니다. –
나는 C++로 컴파일 중임 –