C名称修饰规则

1.对于使用__cdecl调用约定的函数,在函数名称前加一下划线,不考虑参数和返回值。

2.对于使用__fastcall调用约定的函数,在函数名称前后各加一@符号,后跟参数的长度,不考虑返回值。

例如 extern “C” int __fastcall Test(int n)的修饰名称为@Test@4.

3.对于使用 __stdcall 标准调用约定的函数,在函数名称前加一下划线,名称后加一@符号,后跟参数的长度,不考虑返回值。

例如 extern “C” int __stdcall Test(int n,int m)的修饰名称为 _Test@8

C++名称修饰组成部分

  1. 问号前缀
  2. 函数名称或不包括类名的方法名称。构造函数和析构函数具有特别的民称,分别为?0和?1。运算符重载也具有特别的名称,例如new ,delete ,= , +和++的名称分别为?2, ?3, ?4, ?H和?E,我们把这些特别的函数名称简称为特殊函数名。
  3. 如果不是特殊函数名,那么加一个分隔符@
  4. 如果是类的方法,那么由所属类开始依次加上类名和父类名,每个类名后面跟一个@符号,所有类名加好后,再加上一个@符号和字符Q或者S(静态方法)。如果不是类的方法,那么直接加上@符号和字符Y.
  5. 调用约定代码。对于不属于任何类的函数,C调用约定(__cdecl)的代码为A,__fastcall约定的代码为I,__stdcall 的代码为G,对于类方法,调用约定前会加一个字符A,this调用的代码为E.
  6. 返回值编码。 例如字符H代表整数类型的返回值
  7. 参数列表编码,以@符号结束。
  8. 后缀Z。

C++名称修饰组成规律

一:都是以?开始,以字符Z结束,中间由@符号分割为多个部分。整个名称的长度最长为2048个字节。

二:对于类的函数,其基本结构为:?方法名@类名@@调用约定 返回类型 参数列表 Z。

三:对于不属于任何类的函数,其基本结构: ?函数名@@Y调用约定 返回类型 参数列表Z。

例如:

Int __cdecl TestFunc(int ,int ) 修饰名称为?TestFunc@@YAHHH@Z

@Y表明不是类的方法

A代表调用约定 __cdecl

一个H代表返回值为整数类型,后两个H代表两个整型参数

Public int CTest::SetName(char*,…) 修饰名称为 ?SetName@CTest@@QAAHPADZZ

?是前缀

SetSetName是方法名

CTest是类名

@Q表示类名结束

第一个A为C++方法的调用约定前缀,后面的A表示C调用约定(因为声明中包含可变数量参数,所以编译器会自动使用_cdecl)。

H表示返回值类型(整数)

PAD为参数编码,Z是后缀

再例如构造函数

Public : CTest::CTest(void),修饰名称为 ??0CTest@@QAE@XZ

?0 代表构造函数

CTest 表示类名

@Q 表示类名结束

AE 表示this 调用约定

例如运算符重载:

public :void CTest::operator delete (void*)  修饰名称为??3CTest@@SAXPAX@Z

@S表示重载delete 运算符被自动编译成静态方法,重载new 也是如此。

C 和C++ 名称修饰规则的更多相关文章

  1. DLL中调用约定和名称修饰(一)

    DLL中调用约定和名称修饰(一) 调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议.这种协议规定了该语言的函数中的参数传送方式.参数是否可变和由谁来 ...

  2. C/C++/动态链接库DLL中函数的调用约定与名称修饰

    参见:http://blog.twofei.com/cc/impl/calling-convension.html 调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用 ...

  3. C/C++:函数的调用约定(Calling Convention)和名称修饰(Decorated Name)以及两者不匹配引起的问题

    转自:http://blog.csdn.net/zskof/article/details/3475182 注:C++有着与C不同的名称修饰,主要是为了解决重载(overload):调用约定则影响函数 ...

  4. PHP 面向对象编程和设计模式 (5/5) - PHP 命名空间的使用及名称解析规则

    PHP高级程序设计 学习笔记 2014.06.12 命名空间概述 PHP 在 5.3.0 以后的版本开始支持命名空间.什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这 ...

  5. C/C++函数调用的几种方式及函数名修饰规则以及c++为什么不允许重载仅返回类型不同的函数

    我们知道,调用函数时,计算机常用栈来存放函数执行需要的参数,由于栈的空间大小是有限的,在windows下栈是向低地址扩展的数据结构,是一块连续的内存区域.这句话的意思是栈顶的地址和栈的最大容量是系统预 ...

  6. C++编译器的函数名修饰规则

    我们知道在C++中有函数重载这样一个东西,当我们定义了几个功能类似且函数名是一样的函数的时候,只要它的参数列表不同,编译是可以通过的,但是在C中是不可以的. double add(double a, ...

  7. Reface.NPI 方法名称解析规则详解

    在上次的文章中简单介绍了 Reface.NPI 中的功能. 本期,将对这方法名称解析规则进行详细的解释和说明, 以便开发者可以完整的使用 Reface.NPI 中的各种功能. 基本规则 方法名称以 I ...

  8. const修饰规则 及其 用法

    const指针和指向const变量的指针,在写法上容易让人混淆,记住一个规则:从左至右,依次结合,const就近结合. 比如,int * const p: 1.int * (const p):变量p经 ...

  9. 描述Linux发行版的系统目录名称命名规则以及用途

    linux各种发行版都遵循LSB(Linux Stadards Base)规则,使用一致的相关的基础目录名称,使用根目录系统结构(root filesystem),使用FHS(Files Hierar ...

随机推荐

  1. Oracle12C的EM无法访问怎么办?

    装完Oracle 12c,想体验下EM Express,缺发现不能用,应该怎么办?12c的EM 不再像以前版本配置那么麻烦,当然提供的功能也没有那么多了,只需要启用对应端口即可,请看:To manua ...

  2. RTFM

    RTFM是一个网络语言,意思是:“去读那些他妈的手册”(Read The Fucking Manual),这句话通常用在回复那些只要查阅文件就可以解决,拿出来提问只是浪费别人时间的问题.

  3. Boolean.parseBoolean("true") 和 Boolean.getBoolean("true");的区别及用法

    正确用法:boolean repeatIndicator = Boolean.valueOf("true").booleanValue();或者也可以使用Boolean.parse ...

  4. AOP在 .NET中的七种实现方法

    7Approaches for AOP in .Net AOP在 .NET中的七种实现方法 Here are all the ways that I can think of to add AOPto ...

  5. 海蜘蛛ISPV6.1.5,目前破解版本中最稳定的!

    海蜘蛛ISPV6.1.5,目前破解版本中最稳定的! 破解步骤如下: 一.安装完毕进控制台 二.使用muddyboot登陆 密码(123456) 三.输入root回车 四.输入regtools回车 五. ...

  6. 为iPhone6设计自适应布局

    Apple从iOS6加入了Auto Layout后开始就比较委婉的开始鼓励.建议开发者使用自适应布局,但是到目前为止,我感觉大多数开发者一直在回避这个问题,不管是不是由于历史原因造成的,至少他们在心底 ...

  7. php正则表达式获取表格内容

    <?php $contents = '<tr class=""> <td>508982</td> <td>08,07,01,0 ...

  8. python djange输入中文错误的解决办法

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) ...

  9. 编译QT时出现lib/libQtGui.so: undefined reference to `ts_read_raw'的解决办法

    lib/libQtGui.so: undefined reference to `ts_read_raw' /lib/libQtGui.so: undefined reference to `ts_o ...

  10. Junit单元测试中优先使用AssertThat

    主要的优点: 1. 易读性 2. 错误信息更方便 推荐阅读:https://objectpartners.com/2013/09/18/the-benefits-of-using-assertthat ...