如果您試圖將此問題標記爲重複,請注意,我已閱讀有關此主題的問題,但仍有一些問題尚未解決。我的印象是這個構造在包含C頭文件和使用C代碼鏈接時使用(請糾正我,如果我錯了)。這是否意味着在不處理目標文件時,我從不必使用「extern C」?如果我錯了,爲什麼舊的C代碼不能編譯爲C++,因爲它很可能是合法的C++代碼?extern「C」--- when * exactly * to use?
我有點玄乎它,因爲我發誓我已經下與舊的C 源代碼工作時,有情況++其中一個鏈接錯誤只與「外部C」,和庫頭解決確實有
#ifdef __cplusplus
#extern "C"{
#endif
//......
#ifdef _cplusplus
}
#endif
圍繞着它們。
編輯:對不起,因爲不清楚,但我要問的是,只有在包含C頭文件和與預先存在的C對象文件鏈接時才需要「extern C」?如果這是真的(似乎是從下面的評論來判斷),爲什麼庫標題在它們周圍有「extern C」子句,爲什麼它們不能被包含和編譯爲C++?
「爲什麼不能將舊的C代碼編譯爲C++?」即使C代碼是有效的C++,「extern C」也意味着鏈接到編譯爲C的目標文件,這意味着您仍然需要使用基於C的調用約定。 –
@ChrisHayes所以當我不使用預先存在的對象文件時是這樣,我不需要「extern C」? – user3109672
只是爲了使其明確(我仍然看到一個近距離投票):其他問題涵蓋了「如果連接到C代碼**是否需要**」extern「C」',這個問題是「是'extern」C 「只有**鏈接到C代碼時,才需要**」。請僅關注**,如果**。 – MSalters