我正在阅读C ++ FAQ Lite的Section 32: How to mix C and C++。 It says that I should strongly consider adding extern "C" {...}
in my header file (adding the appropriate preprocessor directives, of course。这样,我可以在C ++源文件中包含标题“没有任何extern”C“废话”:
// Get declaration for f(int i, char c, float x) #include "my-C-code.h"
“废话”,不那么容易的选择似乎是这样的:
extern "C" { // Get declaration for f(int i, char c, float x) #include "my-C-code.h" }
为什么第一个选项是首选?这只是一个风格问题(当有人包括它时,键入的字符数量)?
答案 0 :(得分:3)
是的,这只是一种风格。但它确实使人们在使用你的图书馆时的生活更加轻松,所以它可能值得坚持。
答案 1 :(得分:3)
您可以将语句一次放入头文件中,或者使用它的每个人都可以将语句放在包含头文件的任何位置。前者对我来说肯定是更好的风格。
答案 2 :(得分:2)
这实现了它允许您将C头文件与C ++代码一起使用,因为将定义宏"__cplusplus"
。但是你仍然可以将它与未定义宏的遗留C代码一起使用,因此它不会看到唯一的C ++构造。
#ifdef __cplusplus
extern "C" {
#endif
// all of your legacy C code here
#ifdef __cplusplus
}
#endif
替代方法是将其与#include
一起使用,但如果您在C头文件中执行此操作,那么您只需要执行一次,并且它向后兼容。
答案 3 :(得分:0)
如果您不使用图书馆,那么尝试使用图书馆的人会感到很痛苦。如果在没有C ++应用程序的情况下使用C头,则用户将收到编译器或链接器错误,这对于不熟悉该问题的人来说尤其令人困惑。