プログラミングユーティリティ

C++ 符号化シンボル

関数名が C++ の符号化 (mangle) シンボルの場合には、lex はそれを復号化された (demangle) 形式で出力します。符号化 C++ シンボルは、すべて復号化シンボルの後で [] でくくられます。通常の符号化 C++ 関数名 (メンバー関数と非メンバー関数を含む) の場合には、関数プロトタイプがその復号化 (demangle) の形式として使用されます。

たとえば、以下の関数名は、

 _ct_13Iostream_initFv

以下のように出力されます。

 Iostream_init::Iostream_init()

C++ の静的コンストラクタと静的デストラクタは、復号化されて以下の形式で出力されます。

 static constructor function for 

または、

 static destructor function for 

たとえば、以下のデストラクタは、

 _std_stream_in_c_Fv 

以下のように復号化されます。

 static destructor function for _stream_in_c

C++ 仮想テーブルシンボルが符号化された時の名前は以下の形式になります。

 _vtbl_class
 _vtbl_root_class_derived_class

lex の出力では、仮想テーブルシンボルが復号化された時のの名前は以下のように出力されます。

 virtual table for class
 virtual table for class derived_class derived from root_class

たとえば、以下を復号化すると、

 _vtbl_7fstream

以下の形式になります。

 virtual table for fstreamH

また、以下を復号化すると、

 _vtbl_3ios_18ostream_withassign

以下の形式になります。

virtual table for class ostream_withassign derived from ios

一部の C++ シンボルは、仮想テーブルに対するポインタです。符号化された時の名前は、以下の形式になります。

 _ptbl_class_filename
 _ptbl_root_class_derived_class_filename

lex の出力では、これらのシンボルが復号化された時の名前は以下のように出力されます。

pointer to virtual table for class in filename
pointer to virtual table for class derived class derived from
  root_class in filename

たとえば、以下を復号化すると、

 _ptbl_3ios_stream_fstream_c

以下の形式になります。

 pointer to the virtual table for ios in _stream_fstream_c

また、以下を復号化すると、

 _ptbl_3ios_11fstreambase_stream_fstream_c

以下の形式になります。

 _stream_fstream_c
 pointer to the virtual table for class fstreambase derived
  from ios in _stream_fstream_c