C++函数符号生成规则

血红的双手。 提交于 2020-02-06 06:06:35

在复习C++的基础知识点的时候,遇到了关于写出函数生成的函数符号问题,发现自己C++函数调用约定不清楚,所以打算总结一下,将C++函数的调用约定总结一下,加深一下记忆。

 

本文的主要内容是学习他人博客总结的结果。

 

符号生成规则

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

 

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

 

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

 

参数表拼写代号
X D E F H I J K M N

_N

U PA+ PB+ ...
void char

unsigned

char

short int

unsigned

int

long

unsigned

long

float double bool struct

指针+

类型

const指针+类型 ...

举个例子:

int func(int)           //  ?func@@YAHH@Z
float func(float)        //  ?func@@YAMM@Z

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

 

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

例:

int Test::func(float)     //  ?func@Test@@AAEHM@Z
int Test::A::func()       //  ?func@Test::A@@AAEHX@Z

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!