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

概述

前段时间整理了函数的调用约定,顺便说了C编译器下的函数名修饰规则,其中漏掉了C++中函数名的修饰规则,今天就给补上。

1、函数名字修饰的意义

函数的名字修饰就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型。链接程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置。(链接问题后面再整理)

多数情况下程序员并不需要知道函数的名字修饰,链接程序或其他工具会自动区分他们。当然,在某些情况下需要指定函数的名字修饰,例如在C++程序中, 为了让链接程序或其他工具能够匹配到正确的函数名字,就必须为重载函数和一些特殊的函数(如构造函数和析构函数)指定名字装饰。另一种需要指定函数的名字修饰的情况是在汇编程序中调用C或C++的函数。如果函数名字,调用约定,返回值类型或函数参数有任何改变,原来的名字修饰就不再有效,必须指定新的名字修饰。

2、C++编译器的函数名修饰规则

C++的函数名修饰规则有些复杂,但是信息更充分,通过分析修饰名不仅能够知道函数的调用方式,返回值类型,参数个数甚至参数类型。

对于非成员函数,不管 __cdecl,__fastcall还是__stdcall调用方式,函数修饰都是以一个“?”开始,后面紧跟函数的名字,再后面是参数表的开始标识和 按照参数类型代号拼出的参数表

参数表的拼写代号如下所示:

X -- void    
D -- char    
E -- unsigned char    
F -- short    
H -- int    
I  -- unsigned int    
J  -- long    
K -- unsigned long(DWORD) 
M -- float    
N -- double    
_N -- bool 
U -- struct 
PA -- 指针
PB -- const类型的指针

指针的方式有些特别,后面的代号表明指针类型,如果相同类型的指针连续出现,以“0”代替,一 个“0”代表一次重复。
U表示结构类型,通常后跟结构

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值