为什么不应该extern "C"
为需要定义为 C 函数的函数指定?将文件编译为 C 源代码时会对编译器产生什么影响?
如果对 C 编译器没有影响,我们不能通过删除#ifdef __cplusplus
检查在下面的头文件中定义一个函数吗?
extern "C" {
int MyFunc();
}
另一个问题的答案说#ifdef
需要,但我不明白为什么:
关于#2: __cplusplus 将为通过 C++ 编译器运行的任何编译单元定义。通常,这意味着 .cpp 文件和该 .cpp 文件包含的任何文件。如果不同的编译单元包含相同的 .h(或 .hh 或 .hpp 或 what-have-you),则可以在不同时间将它们解释为 C 或 C++。如果您希望 .h 文件中的原型引用 C 符号名称,则它们
extern "C"
在被解释为 C++ 时必须具有,而在被解释为 C 时不应具有extern "C"
- 因此进行#ifdef __cplusplus
检查。