C/C++ 函數符號生成規則


函數符號是編譯器在編譯期間創建的一個字符串 用來指明函數的定義或原型,C/C++函數在內部使用不同的名字修飾方式.
假設一個函數的聲明如下 目標是一臺32位機器

int function(int a,int b)

C編譯器函數名修飾規則

_cdecl調用約定(C標準調用約定)

僅僅在輸出函數名前加一個下劃線前綴
_function

_stdcall約定調用(windows標準調用約定)

編譯器和鏈接器會在輸出的函數名前加一個下劃線前綴,函數名後面加上一個@和其參數的字節數
_function@8

fastcall調用約定(快速調用約定)

在輸出函數名前加一個@後面也加一個@符號和其參數的字節數
@function@8

C++編譯器函數名修飾規則

對於_cdecl方式 參數表的開始標識是@@YA
對於_stdcall方式 參數表的開始標識是@@YG
對於_fastcall方式 參數表的開始標識是@@YI

_cdecl調用約定

? + 函數名 + 參數表的開始標誌@@YA + 函數返回類型代號 + 參數類型代號 + 結束標誌 @Z/Z(無參數)
?function@@YAHHH@Z

_stdcall調用約定

? + 函數名 + 參數列表的開始標誌@@YG + 函數的返回值類型代號 + 參數類型代號 + 結束標誌 @Z/Z(無參數)
?function@@YGHHH@Z

fastcall調用約定

? + 函數名 + 參數列表的開始標誌@@YI + 函數的返回值類型代號 + 參數類型代號 + 結束標誌 @Z/Z(無參數)
?function@@YIHHH@Z

_thiscall調用約定(類成員方法的約定)

? + 函數名 + @字符引導的類名 + 參數表的開始標誌 + 函數的返回類型代號 + 結束標誌@Z/Z

參數表

類型代號

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
U struct
PA+類型 指針
PB+ const指針

類參數白開始標誌

public @@QAE
protected @@IAE
private @@AAE
使用const 則將A換爲B

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章