我一直在C工作了很長時間,編譯器通常會在extern
的開頭添加一個下劃線的事實只是理解......但是,another SO question today讓我想知道爲什麼添加下劃線的真正原因。一個宣稱的理由是:爲什麼C編譯器會在外部名稱前加下劃線?
這對C編譯器前面加上一個前導下劃線所有外部範圍的節目標識符,以避免衝突與運行語言支持貢獻
我覺得有常見的做法至少這是真相的一個核心,但似乎也沒有真正回答這個問題,因爲如果將下劃線添加到所有的extern中,對於防止衝突沒有多大幫助。
有沒有人有關於領導下劃線的基本原理的良好信息?
Unix creat()
系統調用不是以'e'結尾的原因是否增加了下劃線部分?我聽說某些平臺上的早期連接器對名稱有6個字符的限制。如果是這樣的話,那麼對外部名稱加下劃線似乎是一個徹底的瘋狂想法(現在我只有5個角色可以玩......)。
應當指出的是,這種行爲是不是現代ELF系統實踐。顯然,它在aout/coff平臺上很常見。 – 2010-12-07 01:33:43
Clang爲什麼在OS X上執行它?我怎樣才能關閉它? – MarcusJ 2016-05-29 02:07:24