讀完Why do we need extern "C"{ #include <foo.h> } in C++?我得出的結論是,在extern「C」塊內包含一個頭是很好的。混合C/C++頭文件可以包含另一個混合頭文件嗎?
但我遇到了這個問題星座:
#ifdef __cplusplus
extern "C" {
#endif
#include "mixedstuff.h"
#ifdef __cplusplus
}
#endif
mixedstuff.h:
#ifdef __cplusplus
extern "C" {
#endif
#include "cstuff.h"
#ifdef __cplusplus
}
#include "cppstuff.h"
#endif
正如人們所看到的,我結束了cppstuff.h
被列入由extern "C"
內的C++編譯器塊。這導致了很多錯誤,因爲許多陳述在C-linkage中是不可能的。
明顯的解決辦法是在以外的extern "C"
塊。但是這需要我查看每個頭文件,看它是否是純C++或混合的。
從這我推薦使標題C++意識到,而不是將它們包含在extern「C」中。我是對的,還是有更好的方法?
__cplusplus的第一次使用是不必要的,因爲包括.h文件已經照顧它。這當然解決了這個問題。不要太多:) – 2014-09-30 15:15:18
這就是我的意思是「明顯的解決方案」。我試圖尋求這種情況下的最佳做法。 – Sascha 2014-10-01 07:29:51