簡體   English   中英

如果我使用帶有C工具鏈的extern“C ++”會發生什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM