萬盛學電腦網

 萬盛學電腦網 >> 網頁制作 >> Html5 >> C++名字修飾約定

C++名字修飾約定

下面是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++名字修飾約定,希望大家繼續關注本網站。

copyright © 萬盛學電腦網 all rights reserved