在头文件中添加"extern C"有什么好处?
What's the advantage of adding "extern C" in my header files?
我正在阅读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头文件,用户将会得到编译器或链接器错误,这对于不熟悉该问题的人来说尤其令人困惑。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为什么在全局范围内使用"extern int a"似乎不行?
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 有什么方法可以在标头中定义和声明 extern 对象吗?
- 视觉 "extern __forceinline "是什么 c++ 习语?
- 使用使用"extern "C""的 C 库与使用本机C++库有什么缺点?
- CppUTest中extern关键字的替代方案是什么
- 什么是'extern inline'函数以及何时使用?
- 什么是"extern linkage and with C language linkage"
- C++ 中 "extern" 语句的确切含义是什么?
- C++当"extern int * name"引用不存在的变量,然后访问"name"时会发生什么
- "extern PACKAGE TMyForm * MyForm"的含义是什么
- 在头文件中添加"extern C"有什么好处?