結合C+和C-#ifdef_cplusplus是如何工作的?我正在做一個有很多遺產的項目C密碼。我們已經開始用C+編寫,目的是最終轉換遺留代碼。我有點搞不懂C與C+交互。我理解通過包裝C代碼extern "C"C+編譯器不會損壞C代碼的名稱,但我不完全確定如何實現這一點。所以,在每個C頭文件(在包含守衛之后),我們有#ifdef __cplusplusextern "C" {#endif在底部,我們寫#ifdef __cplusplus}#endif在這兩者之間,我們有我們所有的包含,類型和功能原型。我有幾個問題,看看我是否正確地理解了這一點:如果我有一個C+文件A.hh,其中包括C頭文件B.H,包括另一個C頭文件C.H,這是如何工作的?我認為當編譯器進入B.H時,__cplusplus將被定義,因此它將用extern "C"(和__cplusplus將不會在此塊中定義)。所以,當它進入C.H的時候,__cplusplus將不定義代碼,也不會將代碼包裝在extern "C"..這是對的嗎?包裝一段代碼有什么問題嗎?extern "C" { extern "C" { .. } }?第二個extern "C"做?我們不把這個包裝放在.c文件上,只放在.h文件上。那么,如果一個函數沒有原型,會發生什么呢?編譯器認為它是C+函數嗎?我們還使用了一些第三方代碼,這些代碼是在C,而且沒有這種包裝。每當我從那個庫中包含一個標題時,我就會將extern "C"圍繞#包括。這是處理這個問題的正確方法嗎?最后,這是個好主意嗎?我們還有什么要做的嗎?我們要混合C和C+在可預見的將來,我想確保我們涵蓋了我們所有的基地。
結合C+和C-#ifdef_cplusplus是如何工作的?
慕蓋茨4494581
2019-06-29 14:54:22
