【发布时间】:2012-04-25 01:25:16
【问题描述】:
我只是想知道为什么名称修饰从未被 C++ 标准标准化。显然,使用不同的名称修饰算法会损害互操作性[1],而且我认为实现定义没有任何优势。
也就是说,与调用约定或原语大小相反,机器本身并不关心甚至不知道函数是如何被调用的。那么为什么它没有标准化,为什么它仍然没有标准化呢?编译器在过去无论如何都更改了版本之间的规则。
[1] 所有将函数导出为 extern "C" 的人都在说话。
【问题讨论】:
-
标准化名称修改只会给您一种错误的安全感,因为您还必须标准化 ABI 以获得适当的互操作性。而且 C++ 标准委员会不太可能涉足 ABI 标准化业务。
-
+1 @Raymond - 在互操作性问题上对自己撒谎是个坏消息。这就像依赖未定义的行为一样。当然,您认为它有效,但实际上无效。
-
诚然,就 C++ ABI 达成一致要比 C 困难得多。稍微 OT:这个问题中究竟有什么不适合 3 人的 SO?毕竟,正如已经显示的那样,显然存在一个很好的独特答案。
-
ABI 是与实现相关的,即它强烈依赖于机器。在不同的机器上,你最终会得到不同的 ABI,这不是 C++ 作为一门语言的范畴。它更多地属于汇编程序的领域。这就是 C++ 委员会没有对 ABI 进行标准化的原因。但它通常由实现者和机器设计者(如 Intel 等)标准化。下面是 Intel Itanium 用于 C++ 的 x86 ABI 的非常详细的描述:sourcery.mentor.com/public/cxx-abi
-
与所有“为什么 XXX 不标准化”的答案相同:太难了,不够用,微软想阻止兼容性等 :-)
标签: c++ name-mangling