我正在做一个有很多遗留C代码的项目.我们已经开始用C++编写,目的是最终转换遗留代码.我对C和C++的交互有点困惑.我知道,用C的代码包extern "C"
,C++编译器不会损坏C个代码的名称,但我不完全知道如何实现这个代码.
因此,在每个C头文件的顶部(在Include警卫之后),我们有
#ifdef __cplusplus
extern "C" {
#endif
在底部,我们写道
#ifdef __cplusplus
}
#endif
在这两者之间,我们拥有所有的include、typedefs和function原型.我有几个问题,看看我的理解是否正确:
如果我有一个C++文件A.hh,它 包括C头文件B.h, 包括另C个头文件C.h, 这是怎么回事?我认为 当编译器步入B.H时, 将定义
__cplusplus
,因此它 将用extern "C"
包装代码 (__cplusplus
将不会是 在本挡路中定义).所以, 当它踏入C.H, 将不会定义__cplusplus
并且代码不会被包装在extern "C"
.这是对的吗?有什么不对劲吗? 使用包装一段代码
extern "C" { extern "C" { .. } }
? 第二个extern "C"
会是什么? 做?我们不会把这个包装纸包在桌子上.c文件,只是.h文件.那么,如果一个函数没有原型会发生什么呢?编译器认为它是C++函数吗?
我们还使用了一些第三方软件
最后,这是一个好主意吗?