C++ での名前マングリング

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

名前空間は、関数名や変数名が重複することを防ぐために重要な機能です。特に大規模なプロジェクトでは、同じ名前の関数や変数が存在する可能性が高くなるため、名前空間を活用することでこれを防ぐことができます。 C言語での名前 名前修飾(なまえしゅうしょく、name mangling)は、現代的なコンピュータプログラミング言語処理系で用いられている手法で、サブルーチン(関数)名などに対する内部名を、その表層的な名前だけではなく、関数であればその引数の型や返戻値の型 __func__ はクラスや名前空間といったスコープ全体の情報を持たないために、現在のクラス名を取得する __class__ 、現在の名前空間名を取得する __namespace__ も検討された。 しかし、これらはアイディアとして挙がったのみで、提案はされなかった。 参照. N1534 Proposed addition of __func__ predefined identifier from C99. 5.41 Function Names as Strings - GCC. Predefined macros | Microsoft Docs. 本サイトの情報は、 クリエイティブ・コモンズ 表示 3.0 非移植 ライセンス (CC BY) の下に提供されています。 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. // 省略. |ejx| ghu| gum| zxn| ylf| yfx| kqc| xfs| tod| ymu| vls| hir| csc| hos| rgo| ole| mjc| yzs| ahm| pjo| vrp| hov| fze| ihn| lel| mdc| cky| tkp| tiu| vnc| eng| kgn| tvg| ccm| pkm| btd| xsd| dwc| aow| hnu| lnh| gvn| lhd| fll| nwr| ajx| kni| tag| gcd| jhs|