c/c++函数符号的生成规则

函数符号(函数的名字修饰):是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型。

C和C++程序的函数在内部使用不同的名字修饰方式,下来就来进行详细的介绍:

1、C编译器的函数名修饰规则 

__cdecl调用约定(c标准调用约定):仅在输出函数名前加上一个下划线前缀,例如_sum

__stdcall调用约定(windows标准调用约定):编译器和链接器会在输出函数名前加上一个下划线前缀,函数名后面加上一个“@”符号和其参数的字节数,例如 _sum@number

__fastcall调用约定(快速调用约定):在输出函数名前加上一个“@”符号,后面也是一个“@”符号和其参数的字节数,例如 @sum@number

2、 C++编译器的函数名修饰规则 

对于__stdcall方式,参数表的开始标识是“@@YG”,对于__cdecl方式则是“@@YA”,对于 __fastcall方式则是“@@YI”。

符号生成规则

_cdecl调用约定:“?”+函数名+参数表的开始标识 “@@YA” + 函数返回类型代号+参数类型代号 +结束标识“@Z”或“Z”(无参数)。

_stdcall调用约定:“?”+函数名+参数表的开始标识“@@YG”+函数返回类型代号+参数类型代号 +结束标识“@Z”或“Z”(无参数)。

_fastcal调用约定:“?”+函数名+参数表的开始标识 “@@YI”+ 函数返回类型代号+参数类型代号 +结束标识“@Z”或“Z”(无参数)。
                                                                                参数表的拼写代号

XDEFHIJKMN_NUPA+PB+...
voidchar

unsigned

char

shortint

unsigned

int

long

unsigned

long

floatdoubleboolstruct指针+类型const指针+类型...

_thiscall调用约定(类成员方法的约定):“?” +函数名+ “@”字符引导的类名+参数表的开始标识(函数性质决定)+ 函数返回类型代号+参数类型代号 +结束标识“@Z”或“Z”(无参数)。

参数表的开始标识:公有(public)成员函数的标识“@@QAE”,保护(protected)成员函数的标识“@@IAE”,私有(private)成员函数“@@AAE”;如果使用Const ,则对应的标识“@@QBE”,“@@IBE”,“@@ABE”。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值