【问题标题】:Name decoration in CC中的名称装饰
【发布时间】:2016-10-24 12:47:24
【问题描述】:

是否有任何标准要求名称装饰?

据我所知,大多数(全部?)符合标准的实现都会在每个导出符号的名称中添加下划线前缀。这是由 C、POSIX 或其他标准保证的吗?

【问题讨论】:

  • 您要查找的词是name mangling
  • 不,只有少数实现这样做。例如,几乎所有基于 ELF 的目标都不给符号添加下划线。

标签: c standards name-decoration


【解决方案1】:

我不确定“标准”,但前置下划线似乎是 1970 年代非常普遍的惯例。来自What is the reason function names are prefixed with an underscore by the compiler?

在 1974 年左右用 C 重写 UNIX 时,它的作者 已经有大量的汇编语言库,而且更容易 破坏新的 C 和 C 兼容代码的名称,而不是返回和 修复所有现有代码。

如果您想与 Windows 上的 Microsoft 编译器互操作,则 C 名称是必需的(仅限 win32;win64 不使用修饰,因为它只有一个标准调用约定)。

https://docs.microsoft.com/en-us/cpp/build/reference/decorated-names

另见:Why do C compilers prepend underscores to external names?

【讨论】:

    猜你喜欢
    • 2012-02-28
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2011-06-20
    相关资源
    最近更新 更多