GCC의 Typeid.name() 동작 및 디맹글링 기술
typeid 연산자를 사용할 때 개발자는 typeid 출력에 차이가 있습니다. name()은 사용된 컴파일러에 따라 다릅니다. 이 기사에서는 GCC에서 이런 일이 발생하는 이유와 문제가 해결된 형식 이름을 인쇄하는 문제를 해결하는 방법을 살펴봅니다.
GCC 대 Visual C: 형식 이름 표시
예제에서 제공된 경우 GCC(버전 4.4.4)는 typeid(Blah).name()을 호출할 때 "4Blah"를 반환하는 반면 Visual C 2008에서는 "struct Blah"를 표시합니다. 이러한 불일치는 GCC가 장식된 유형 이름을 반환하기 때문에 발생합니다.
GCC의 장식된 유형 이름
typeid 연산자의 구현은 균일하게 정의되지 않습니다. GCC의 경우 유형의 크기 및 정렬과 같은 추가 정보가 포함된 장식된 유형 이름을 반환합니다.
Unmangling Decorated Names
잘못된 유형을 검색하려면 이름을 입력하면 사용자는 데코레이팅된 이름을 해독해야 합니다. 이는 다양한 도구를 사용하여 수행할 수 있습니다:
Demangling 적용
GCC에서는 다음 명령을 실행하여 장식된 이름 "4Blah"를 demangle할 수 있습니다. :
g++ -fno-rtti -no-pie -o main main.cpp ./main | c++filt
이 명령은 "struct Blah"를 demangled 유형 이름으로 인쇄합니다. __cxa_demangle() 함수를 코드에 통합하는 것도 데코레이팅된 이름을 프로그래밍 방식으로 분해하기 위한 옵션입니다.
위 내용은 `typeid.name()`이 GCC에서 다른 출력을 생성하는 이유는 무엇이며 어떻게 해독할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!