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