gcc를 사용하면 typeid를 사용하여 객체/변수의 유형을 요청할 때 type_info :: name 메소드와 다른 결과를 얻을 수 있습니다. 나는 조금 샅샅이 살펴 보았고, RTTI 이름은 구현에 따라 다르다는 것을 알았다.GCC의 RTTI 이름을 사용하지 못하게 할 수 있습니까?
문제는 Windows에서 반환되는 형식 이름을 얻고 싶습니다. 이 작업을 수행하는 쉬운 방법이 있습니까?
gcc를 사용하면 typeid를 사용하여 객체/변수의 유형을 요청할 때 type_info :: name 메소드와 다른 결과를 얻을 수 있습니다. 나는 조금 샅샅이 살펴 보았고, RTTI 이름은 구현에 따라 다르다는 것을 알았다.GCC의 RTTI 이름을 사용하지 못하게 할 수 있습니까?
문제는 Windows에서 반환되는 형식 이름을 얻고 싶습니다. 이 작업을 수행하는 쉬운 방법이 있습니까?
당신이 묻는다면, gcc가 type_info::name()
에 의해 반환 된 이름과 관련하여 msvc처럼 동작하도록 컴파일러 스위치가 없습니다.
그러나 코드에서 gcc 특정 __cxa_demangle
함수에 의존 할 수 있습니다.
C++ 함수 이름에는 실제로 모든 반환 및 인수 유형 정보와 클래스 및 메서드 이름이 포함됩니다. 컴파일되면 어셈블러 심볼로 작동하고 모든 유형 정보를 포함하는 표준 형식 (각 컴파일러의 표준)으로 '맹 글링 (mangled)'됩니다.
demerler이라고하는 이라고 불리는이 변환을 되돌리려면 함수 또는 프로그램을 실행해야합니다.
함수의 출력에
c++filt myoutput.txt
를 실행 해보십시오. 이 은의 실제 기호 이름을 사람이 읽을 수있는 형식으로 다시 채 웁니다.
다른 질문이 있으시면 Is there an online name demangler for C++? 온라인 도구를 작성했습니다 : c++filtjs