我正在写一个小 C 项目。由于我希望它也包含在 C++ 中,因此我考虑使用 C++ 防护来使其工作,例如:
#ifdef __cplusplus
extern "C" {
#endif
// code
#ifdef __cplusplus
}
#endif
在我的项目中,我有一些头文件不能直接从使用该项目的最终 C++ 文件中包含。但是我面临着疑问:在头文件中放置 C++ 防护是否也是必要的预防措施?
不得直接从最终的 C++ 文件中包含
即使它们是通过嵌套包含间接包含的,也将应用 C++ 编译,并且如果没有extern "C"
符号,C++ 编译模块中的符号将与您链接到的 C 编译模块中的符号不同。
除此之外,这是一种很好的做法,并且为了互操作性而包含它们不会造成任何损害 - 您现在可能不打算在 C++ 编译中使用这些头文件,但您无法确定将来会如何使用它们。
如果要明确阻止 C++ 编译应用于 C 头文件,更好的解决方案是使用:
#if defined __cplusplus
#error C-only header included in C++ compilation
#endif
这样,该问题在编译(或实际上是预处理)时会突出显示,而不是导致链接器错误,当它告诉您xxx
未定义时,当您明确定义它时可能更难解释- 但使用不同的语言。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句