名称重整的约定

Conventions for name mangling

本文关键字:约定      更新时间:2023-10-16

对于一个函数来说:

long myfunction(int,float)

编译器可以将此接口记录为:

?MyFunctionFoo@@YAXH

如果我理解正确,装饰原始名称的附加字符对参数的数量和类型进行了编码

该标准(1.3.17)关于重整的所有内容都是:

签名用作名称重整和链接的基础。

编译器是否遵循上述编码方案的标准约定?

或者,是否需要两个编译器为同一函数提供相同的修饰名称

是否所有编译器都遵循单一的标准方案?

不。这也回答了你的第二个问题。

名称重整是 ABI 的功能。还有标准 ABI,多个编译器为其生成代码。例如,Itanium ABI 有自己的名称重整方案,多个编译器实现了该方案。

但C++标准没有对名称重整提出要求。事实上,它甚至没有说需要这样的名称修改。

编译器是否遵循上述编码方案的标准约定?

否,名称重整编码方案没有标准约定。每个编译器都有自己的名称重整方案。

这里描述了其中一些名称重整方案。请转到文档中的名称重整部分。