Visual_C++名字修飾

Name mangling ， 或者Decorated Name ， 是指程序設計語言中具有存儲性質的對象的名字被編譯器改寫 ， 以適合編譯器 、 鏈接器 ( linker ) 、 彙編器 ( assembler ) 使用 。 所謂的具有存儲性質的對象 ， 即lvalue對象 ， 是指要實際佔用內存空間 、 有內存地址的那些實體對象 ， 例如 ： 變量 ( variables ) 、 函數 、 函數指針等 。 C++ 中的純虛函數作爲特例也屬於這一範疇 。 而數據類型 ( data type ) 就不屬於具有存儲性質的對象 。 Name mangling如何翻譯成中文 ， 尚無廣泛接受的譯法 。 可翻譯作改名或名字修飾 ( name decorating ) 。 對於支持重載 ( overload ) 的程序設計語言 ， name mangling是必需的因而具有特別重要意義 。 C++ 允許函數重載 int foo ( int i ); void foo ( char c ); C++ 也允許變量名稱在不同限定 （ qualifier ) 下同名 ： std:: cout; :: cout; 因此C + + 的編譯器必須給這些函數及變量不同的名字以供程序編譯鏈接 、 載入時的內部辨別使用 。 C++ 的編譯器可大略分爲Windows平臺上的Microsoft Visual C++ 與類Unix平臺上的GNU CC / g + + 兩大類 ， 分別成了各自操作系統環境下的業界工業標準 。 例如 ， Windows平臺上的Intel C++ Compiler （ ICC ） 與Digital Mars C++ ， 都與Visual C++ 保持了二進制兼容 ( Application Binary Interface, ABI ) 。 而Linux平臺上的Intel C++ Compiler （ ICC ） 與HP aC + + ， 都與GCC 3. x / 4. x做到二進制兼容 。 GCC是開源產品 ， 它的內部實現機制是公開的 ； 而Visual C++ 不公開它內部實現細節 ， 因此在name mangling上並無詳盡的正式文檔 ， Visual C++ name mangling的細節屬於hacker行爲 。 一般情況下 ， 編程者不需要知道C / C++ 函數的修飾名字 。 但是 ， 如果在彙編源程序或者內聯彙編中引用了C / C++ 函數 ， 就必須使用其正確的修飾名字 。