原諒我剛學c++,關于函式名的問題,C++中是如何把幾個函式名一樣的函式區別開的???
uj5u.com熱心網友回復:
引數的個數或者型別不同。名字修飾約定:
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++呼叫.
uj5u.com熱心網友回復:
函式多載 函式名稱 一樣 但引數型別反回型別不一樣轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/67707.html
標籤:基礎類
上一篇:有一段改變HICON顏色的宏定義誰能解釋下什么原理;
下一篇:WORD里的電子簽章
