我已经在 C 领域工作了很长时间,以至于编译器通常在 an 的开头添加下划线这一事实才被extern
理解......但是,今天的另一个 SO 问题让我想知道添加下划线的真正原因。维基百科文章声称原因是:
C 编译器的常见做法是在所有外部范围程序标识符前加上前导下划线,以避免与运行时语言支持的贡献发生冲突
我认为这至少有一个真理的核心,但它似乎也没有真正回答这个问题,因为如果将下划线添加到所有外部,它对防止冲突没有多大帮助。
有没有人对前导下划线的基本原理有很好的信息?
添加的下划线是 Unixcreat()
系统调用不以“e”结尾的部分原因吗?我听说某些平台上的早期链接器名称限制为 6 个字符。如果是这种情况,那么在外部名称前加上下划线似乎是一个彻头彻尾的疯狂想法(现在我只有 5 个字符可以玩......)。