下面是C++名字修飾約定:
1、修飾名(Decoration name):"C"或者"C++"函數在內部(編譯和鏈接)通過修飾名識別
2、C編譯時函數名修飾約定規則:
__stdcall調用約定在輸出函數名前加上一個下劃線前綴,後面加上一個"@"符號和其參數的字節數,格式為_functionname@number,例如:function(int a, int b),其修飾名為:_function@8__cdecl調用約定僅在輸出函數名前加上一個下劃線前綴,格式為_functionname。 __fastcall調用約定在輸出函數名前加上一個"@"符號,後面也是一個"@"符號和其參數的字節數,格式為@functionname@number。
3、C++編譯時函數名修飾約定規則:
__stdcall調用約定:
1)、以"?"標識函數名的開始,後跟函數名;
2)、函數名後面以"@@YG"標識參數表的開始,後跟參數表;
3)、參數表以代號表示: X--void , D--char, E--unsigned char, F--short, H--int, I--unsigned int, J--long, K--unsigned long, M--float, N--double, _N--bool, PA--表示指針,後面的代號表明指針類型,如果相同類型的指針連續出現,以"0"代替,一個"0"代表一次重復;
4)、參數表的第一項為該函數的返回值類型,其後依次為參數的數據類型,指針標識在其所指數據類型前;
5)、參數表後以"@Z"標識整個名字的結束,如果該函數無參數,則以"Z"標識結束。 其格式為"?functionname@@YG*****@Z"或"?functionname@@YG*XZ",例如 int Test1(char *var1,unsigned long)----"?Test1@@YGHPADK@Z" void Test2()-----“?Test2@@YGXXZ”
__cdecl調用約定: 規則同上面的_stdcall調用約定,只是參數表的開始標識由上面的"@@YG"變為"@@YA"。
__fastcall調用約定: 規則同上面的_stdcall調用約定,只是參數表的開始標識由上面的"@@YG"變為"@@YI"。 VC++對函數的省缺聲明是"__cedcl",將只能被C/C++調用.
以上就是我們給大家介紹的C++名字修飾約定,希望大家繼續關注本網站。