私は長い間 C で作業してきたので、コンパイラが一般的に an の先頭にアンダースコアを追加するという事実がextern
理解されています... しかし、今日の別の SO の質問で、アンダースコアが追加される本当の理由について疑問に思いました。ウィキペディアの記事によると、その理由は次のとおりです。
ランタイム言語サポートからの貢献との衝突を避けるために、すべての外部スコープ プログラム識別子の先頭にアンダースコアを付加することは、C コンパイラにとって一般的な方法でした。
これには少なくとも真実の核があると思いますが、すべてのexternにアンダースコアが追加された場合、衝突を防ぐのにあまり役に立たないため、実際には質問に答えていないようです.
先頭のアンダースコアの理論的根拠について、誰かが良い情報を持っていますか?
creat()
追加されたアンダースコアは、Unixシステム コールが「e」で終わらない理由の一部ですか? 一部のプラットフォームの初期のリンカーでは、名前が 6 文字に制限されていると聞いたことがあります。その場合、外部名の前にアンダースコアを追加するのは、まったくクレイジーなアイデアのように思えます (今、私は 5 文字しか操作できません...)。