ホームページ >バックエンド開発 >C++ >typeid.name() から GCC のマングルされた型名をデマングルするにはどうすればよいですか?

typeid.name() から GCC のマングルされた型名をデマングルするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-26 06:04:09703ブラウズ

How Can I Demangle GCC's Mangled Type Names from typeid.name()?

GCC の typeid.name() を使用したマングルされていない型名のデマングリング

typeid.name() を使用して型の名前を取得する場合、コンパイラが異なると結果が異なる場合があります。たとえば、GCC は「マングルされた」名前を返すことが知られていますが、Visual C はマングルされていない名前を提供します。

この矛盾は、typeid.name() の戻り値が実装定義であるという事実に起因します。 C 標準に従って、各実装は型名を表現する方法を決定する裁量権を持っています。

GCC の場合、typeid.name() によって返される名前には、「マングル名」として知られる追加情報が含まれます。 」この形式には、内部コンパイラの目的を果たす装飾が含まれています。マングルされていない型名を取得するには、 c filt コマンドまたは __cxa_demangle 関数を使用できます。

c filt 4Blah

出力: struct Blah

__cxa_demangle("4Blah", nullptr、nullptr、 nullptr)

出力: なんと

これらのツールを利用すると、装飾された型名を分解し、必要な分解されていない表現を取得できます。

以上がtypeid.name() から GCC のマングルされた型名をデマングルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。