您现在的位置: 万盛学电脑网 >> 程序编程 >> 网页制作 >> Html5 >> 正文

C++名字修饰约定

作者:佚名    责任编辑:admin    更新时间:2022-06-22

下面是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++名字修饰约定,希望大家继续关注本网站。