首页 > 编程语言 >C++函数名修饰规则

C++函数名修饰规则

时间:2023-02-25 16:24:52浏览次数:47  
标签:const 函数 int C++ 修饰 标识符 CTest

C++函数名修饰规则

这是啥

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

修饰规则

C++的修饰规则为“? + 函数名 + 标识符”

标识符的第一部分

标识符的第一部分是调用规则说明:

__cdelc __fastcall __stdcall
@@YA @@YI @@YG

标识符的第二部分

标识符的第二部分依次是返回值和函数参数的类型:

int char void unsigned int unsigned char float double bool struct
H D X I E M N _N U

其中如果类型是指针则在标识符前增加PA,如果是const类型的指针则增加PB。
对于结构体则在U后面添加结构体的名称,并以@@结尾。

标识符的第三部分

标识符的第三部分是结束符:
如果函数有参数则以“@Z”结束,否则以“Z”结束。

函数名的第一部分

函数名的第一部分是函数的本名。如果该函数不是类的成员,那么就只有第一部分。

函数名的第二部分

对于类的成员的不同属性有如下规则:

public protected private
无const @@QAE @@IAE @@AAE
有const @@QBE @@IBE @@ABE

同时取消标识符的第一部分。
此时如果参数为类实例引用,则改为“AAV1”,带const改为“ABV1”。

例子

  1. 对于以下函数:
    int Function1(char*, unsigned char);
    的修饰应当为:?Function1@@YGHPADE@Z
  2. 对于以下函数:
struct mytype
{
    int x, y;
};

class CTest 
{ 
private: 
    void Function1(int); 
protected: 
    void Function2(const CTest &src); 
public: 
    void Function3(mytype*, int);
};

其中
Function1的修饰应当为:?Function1@CTest@@AAEXH@Z
Function2的修饰应当为:?Function2@CTest@@IAEXABV1@Z
Function3的修饰应当为:?Function3@CTest@@QAEXPAUmytype@@H@Z

结束语

水了一篇,诶嘿~

标签:const,函数,int,C++,修饰,标识符,CTest
From: https://www.cnblogs.com/Clovershrub/p/17154427.html

相关文章

  • golang中的close函数
    close函数是用于关闭通道的。官方解释(摘自close函数源代码注释):Theclosebuilt-infunctionclosesachannel,whichmustbeeitherbidirectionalorsend-only.Itsho......
  • 可变类型和不可变类型、闭包函数、装饰器+语法糖
    可变类型和不可变类型:  闭包函数:  装饰器+语法糖:   ......
  • C++-4 数组
                   ......
  • map()函数应用
    title:map()函数应用author:杨晓东permalink:map()函数应用date:2021-10-0211:27:04categories:-投篮tags:-demomap()函数应用#正常函数一个参数d......
  • 记录一下使用VScode运行C/C++程序
    三个文件:c_cpp_properties.json、launch.json、tasks.json1.c_cpp_properties.json的生成第一步:   第二步   则会生成   2.tasks.json  3.la......
  • [keil] 将函数定义到RAM运行,和定义无初始化变量(软复位,变量不清空)
    keil链接文件​​一、将函数定义到RAM运行​​​​二、定义无初始化变量(软复位,变量不清空)​​先打开Keil工程配置,选择linker链接文件,取消自动生成,并编辑sct。如上图,定义......
  • C++实现分数四则运算
    #include<iostream>usingnamespacestd;//辗转相除法求最大公约数(12和18的最大公约数:6)intgcd(inta,intb){a=(a<0)?(a=-a):(a=a);b=(......
  • 自动洗牌机c++
    首先是字符数组与结构体的两个应用比较,牌组s1,s2,s3...,如果用字符数组是不能够把s1捆绑在一起的,观察发现牌组都是一个花色捆绑一个数字,可以联想到结构体。其次因为涉及交换,......
  • avformat_seek_file函数介绍
    在做音视频数据分析的时候,经常会遇到这样的需求,每隔5分钟抽取一帧数据进行分析。在做播放器开发的时候,也会遇到这种情况,就是拖动进度条跳转到某个位置进行播放。如果直接用......
  • 构造函数和析构函数
    类内的构造函数:相当于初始化函数,名字和类名一致,可以在里面写入初始化语句类内的析构函数类的对象调用完所有成员函数,将跳出程序之前释放内存空间,名字是构造函数......