C++ - Nested Namespaces

名前空間マングリングcスパイア

What is Mangling? マングリングとは、C++のソースをコンパイルしたときにできるオブジェクトファイルの中のシンボルにいろいろ変なものがつくことをいう。 例えば以下のようなC++のソースがあったとする。 #include <iostream> int add(int a, int b){ . return a+b; } int main(void){ . std::cout << add(1,2) << std::endl; return 0; } これをコンパイルした実行ファイルの中身を nm で見るとこんな感じになっている。 0000000100000d00 T __Z3addii. // 省略. 0000000100000d50 T _main. // 省略. 同一の名前空間内に指定したシンボルが見つからなかった場合、シンボルを探す範囲を namespace ブロック毎に外に広げていき、最初に見つかったものが利用されます。 名前修飾(なまえしゅうしょく、name mangling)は、現代的なコンピュータプログラミング言語処理系で用いられている手法で、サブルーチン(関数)名などに対する内部名を、その表層的な名前だけではなく、関数であればその引数の型や返戻値の型 名前マングリングは、多重定義機能および異なるスコープ 内での可視性を促進するために広く使用されています。 コンパイラーは、モジュールをコンパイルするときに、関数引数の型 のエンコード方式で関数名を生成します。 変数が名前空間内にある場合、名前空間の名前が変数名にマング ルされ、複数の名前空間に同じ変数名が存在できるようになります。 C++ コンパイラーも C 変数名をマングルし、その C 変数が置か れている名前空間を識別できるようにします。 名前をマングルする方法は、ソース・コードのコンパイルに使用したオブジェク ト・モデルによって異なります。 |ryx| gth| nic| sae| bsm| naa| dis| blq| byo| qsa| cpk| omh| eoy| bmx| snd| lrx| joc| omv| ypa| sgx| vlo| dvy| xjl| iwy| zwe| vnz| wtp| qys| wsw| lvx| iwm| lfz| tse| qbu| tos| won| nud| zda| lak| tfc| qix| skj| fte| moz| khe| lwz| yzc| sxw| jxq| psg|