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. golang实现ping命令

    // Copyright 2009 The Go Authors.  All rights reserved.// Use of this source code is governed by a B ...

  2. [笔记]学习HighCharts的使用(不错的web图表插件)

    最近有一个小项目需要用到折线图.到处请教了一下,有人给我推荐了highcharts.感觉还不错,就稍微学习下.这里记录一下学习的过程. 网上相关的内容还不少,我就说一下我学习的内容. 看的第一篇文章& ...

  3. nodejs tools

    1.supervisor npm install supervisor -g supervisor app.js cd public cd bin supervisor www http://www. ...

  4. LintCode-Implement Queue by Stacks

    As the title described, you should only use two stacks to implement a queue's actions. The queue sho ...

  5. 团队作业(NABC的分析)

    我们的团队课题是游戏:躲避小球. 我认为它其中的一个优点是:丰富用户的短暂闲暇时间,使用户得到身心的放松 下面我将从N,A,B,C四个方面简述理由 N(需求):现代社会逐渐步入快节奏时代,大众生活压力 ...

  6. Careercup - Google面试题 - 4847954317803520

    2014-05-08 21:33 题目链接 原题: largest number that an int variable can fit given a memory of certain size ...

  7. CentOS6.5 安装JDK1.7详细步骤参考

    一般情况下,我们都要将linux自带的OPENJDK卸载掉,然后安装SUN的JDK. 首先查看Linux自带的JDK是否已安装. 输入如下命令,查看已经安装的JAVA版本信息. 输入如下命令,查看JD ...

  8. MySQL 主从数据库设置

    1.复制的介绍 MySQL 支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引 以跟踪日志循环.这些日志可 ...

  9. 二分--1043 - Triangle Partitioning

    1043 - Triangle Partitioning PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit:  ...

  10. 【Ural】【1519】Formula 1

    插头DP 本题为CDQ<基于连通性状态压缩的动态规划的……(我忘了)>里的例题!(嗯就是这样……) 先膜拜一下ccy大神……http://blog.sina.com.cn/s/blog_5 ...