C++命名规则详解( 二 )


b 布尔型变量(bool)
f 浮点型变量(float)
p 指针型变量和迭代子(pointer)
pfn 特别针对指向函数指针变量和函数指针(pointer of function)
g 数组(grid)
i 类的实例(instance)对于经常用到的类,也可以定义一些专门的前缀,如:std::string和std::wstring类的前缀可以定义为"st",std::vector类的前缀可以定义为"v"等等
类型的缀可以组合使用,例如"gc"表示字符数组,"ppn"表示指向整型的指针的指针等等 。
4.推荐的组成形式
变量的名字应当使用"名词"或者"形容词+名词" 。例如:"nCode","m_nState","nMaxWidth"...
六、常量命名C++引入了对常量的支持,常量的命名规则如下:

1.常量的命名规则
常量名由类型前缀+全大写字母组成,单词间通过下划线来界定,如cDELIMITER,nMAX_BUFFER…类型前缀的定义和变量命名规则中的相同 。
七、枚举、联合、typedef枚举、联合以及typdef的命名 枚举、联合以及typedef语句生成的类型名全都是大写字母组成,单词间通过下划线界定,如:FAR_PROC,ERROR_TYPE…
八、宏、枚举值宏、枚举值的命名 宏和枚举值全大写字母组成,单词通过下划线界定,如:ERROR_UNKNOWN,OP_STOP…
九、函数的名字修饰函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串 。用来指明函数的定义或原型 。LINK程序或其它工具有时须要指定函数的名字修饰来定位函数的正确位置 。
还有一种须要指定函数的 名字修饰的情况是在汇编程序中调用C或C++的函数 。
十、C编译器的函数名修饰规则对于__stdcall调用约定,编译器和链接器会在输出函数名前加上一个下划线前缀,函数名后面加上一个“@”符号和其參数的字节数 。比如 _functionname@number 。__cdecl调用约定仅在输出函数名前加上一个下划线前缀 。比如_functionname 。__fastcall调用约定在输出函数名前加上一个“@”符号 。后面也是一个“@”符号和其參数的字节数,比如 @functionname@numbe
十一、C++编译器的函数名修饰规则C++的函数名修饰规则有些复杂 。可是信息更充分,通过分析修饰名不仅可以知道函数的调用方式 。返回值类型,參数个数甚至參数类型 。无论 __cdecl,__fastcall还是__stdcall调用方式,函数修饰都是以一个“?”開始,后面紧跟函数的名字 。再后面是參数表的開始标识和 依照參数类型代号拼出的參数表 。
对于__stdcall方式,參数表的開始标识是“@@YG”,对于__cdecl方式则是“@@YA” 。对于 __fastcall方式则是“@@YI” 。參数表的拼写代号例如以下所看到的:
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表示结构类型 。通常后跟结构体的类型名,用“@@”表示结构类型名的结束 。函数的返回值不作特殊处理,它的描写叙述方式和函数參数一 样 。紧跟着參数表的開始标志,也就是说 。函数參数表的第一项实际上是表示函数的返回值类型 。參数表后以“@Z”标识整个名字的结束 。假设该函数无參数,则 以“Z”标识结束 。
注:
  • 1.__stdcall :以“?”标识函数名的開始 。后跟函数名 。函数名后面以“@@YG”标识參数表的開始,后跟參数表 。
  • 2 __cdecl调用约定: 规则同上面的 _stdcall 调用约定,仅仅是參数表的開始标识由上面的“@@YG”变为“@@YA”
  • 3 __fastcall调用约定: 规则同上面的_stdcall调用约定,仅仅是參数表的開始标识由上面的“@@YG”变为“@@YI” 。
  • VC++对函数的省缺声明是"__cedcl",将仅仅能被C/C++调用 。
十二、查看函数的名字修饰有两种方式能够检查你的程序中的函数的名字修饰:使用编译输出列表或使用Dumpbin工具 。使用/FAc,/FAs或/FAcs命令行參数能够让编译器 输出函数或变量名字列表 。使用dumpbin.exe /SYMBOLS命令也能够获得obj文件或lib文件里的函数或变量名字列表 。
此外 。还能够使用 undname.exe 将修饰名转换为未修饰形式
本文参考CSDN博主「卡图卢斯」的文章和yxysuanfa的文章,其链接为:https://blog.csdn.net/u014647208/article/details/84103204和https://www.cnblogs.com/yxysuanfa/p/6984895.html


推荐阅读