在头文件中添加"extern C"有什么好处?

What's the advantage of adding "extern C" in my header files?

本文关键字:什么 extern 文件 添加      更新时间:2023-10-16

我正在阅读c++ FAQ Lite中的第32节:如何混合使用C和c++。它说我应该强烈考虑在我的头文件中添加extern "C" {...}(当然是添加适当的预处理器指令)。这样,我就可以在c++源文件中包含头文件"没有任何外部"的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"
}

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

是的,这只是一个风格的事情。但它确实使人们在使用库时更轻松,因此可能值得坚持使用。

您可以将语句只放在头文件中一次,或者每个使用它的人都可以将语句放在头文件中包含的任何地方。

这样做的目的是允许您在c++代码中使用C头文件,因为宏"__cplusplus"将被定义。但是你也可以在遗留的C代码中使用它,其中宏没有定义,所以它不会看到唯一的c++结构。

#ifdef __cplusplus
extern "C" {
#endif
// all of your legacy C code here
#ifdef __cplusplus
}
#endif

另一种选择是把它与#include,但如果你在C头文件中这样做,那么你只需要做一次,加上它是向后兼容的。

如果您不包含它,对于试图使用您的库的人来说是一种痛苦。如果在c++应用程序中使用了C头文件,用户将会得到编译器或链接器错误,这对于不熟悉该问题的人来说尤其令人困惑。