【发布时间】:2017-11-12 04:02:22
【问题描述】:
有没有意义:
#ifdef __cplusplus
extern "C" {
#endif
// code...
#ifdef __cplusplus
}
#endif
“代码...”只是一堆定义和类型定义(不包含等)?
【问题讨论】:
-
随着 C 和 C++ 的继续分化,现在它的价值已经降低,但对于跨语言可移植性很有用,而且成本低,
有没有意义:
#ifdef __cplusplus
extern "C" {
#endif
// code...
#ifdef __cplusplus
}
#endif
“代码...”只是一堆定义和类型定义(不包含等)?
【问题讨论】:
原则上,在您的特定情况下(没有变量或函数声明),extern "C" 毫无意义。
在实践中,它使代码更具可读性(显示了定义 C++ 友好接口的意图)并且不那么脆弱。一些开发人员(也许是您)可能(在几个月内)在其中添加其他声明。
【讨论】:
这取决于您打算如何使用标头。
如果类型和值在 C 和 C++ 中均有效且含义相同,并且您打算在某些编译为 C 的编译单元和其他编译为 C++ 的编译单元中使用它们,则需要在编译时使用 extern "C"作为 C++。否则,您的 C++ 代码和 C 代码无法互操作。
如果编译单元包含的头文件只会被编译为 C 和 C++,但永远不会同时编译为两者,那么你不需要extern "C"。您可以使用特定于您所选语言的功能。
【讨论】:
consts,而不是#defines。 const 的优势,假设一个合理的质量编译器,往往超过使用宏的好处。有关详细信息,请参阅 stackoverflow.com/questions/6442328/… 和链接的重复项。