在我的头文件中添加“extern C”有什么好处?

时间:2013-01-10 19:35:17

标签: c++ c

我正在阅读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"
}

为什么第一个选项是首选?这只是一个风格问题(当有人包括它时,键入的字符数量)?

4 个答案:

答案 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头,则用户将收到编译器或链接器错误,这对于不熟悉该问题的人来说尤其令人困惑。