[英]What happens if I use extern “C++” with a C toolchain?
我的問題主要是關於C ++工具鏈“理解”C和C ++的事實,所以如果我將一些帶有extern "C"
代碼提供給c ++工具鏈,我認為它可以理解如何處理它; 但是,如果我將帶有extern "C++"
代碼提供給C工具鏈呢?
預期的行為是什么?
如果編譯器也理解C ++,它可能會接受它。 如果它是一個純C編譯器,它將對象(就像它在extern "C"
一樣,因為該語法無效C - 這就是為什么它通常用#ifdef __cplusplus
或其他一些包含)
它應該不編譯,它是無效的C語法。
在頭文件中使C聲明在C和C ++編譯器中工作的標准方法是依賴於僅在C ++編譯器中定義的預處理器符號。 像這樣:
#ifdef __cplusplus
extern "C" {
#endif
// C declarations here
// ...
#ifdef __cplusplus
}
#endif
每個C ++編譯器都定義了__cplusplus。
extern "C++"
不是有效的C代碼,因此符合標准的C編譯器必須發出診斷信息。 沒有要求它不編譯代碼。 在發布診斷之后,編譯器可以自由地執行其實現者認為合適的任何內容。
如果您使用此選項編寫了其他編譯器,則可以執行此操作。
正如@Mats所回答的,我們有另一個實現這個目的的程序是#ifdef __cplusplus
。 而且你正在嘗試的只是錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.