【发布时间】:2012-03-18 22:28:26
【问题描述】:
为什么不应该为需要定义为 C 函数的函数指定 extern "C"?将文件编译为 C 源代码时会对编译器产生什么影响?
如果对 C 编译器没有影响,难道我们不能像下面这样在头文件中定义一个函数,去掉 #ifdef __cplusplus 的检查吗?
extern "C" {
int MyFunc();
}
An answer to another question 说需要#ifdef,但我不明白为什么:
关于#2: __cplusplus 将为通过 C++ 编译器运行的任何编译单元定义。通常,这意味着 .cpp 文件和该 .cpp 文件包含的任何文件。如果不同的编译单元包含相同的 .h(或 .hh 或 .hpp 或 what-have-you),则可以在不同时间将它们解释为 C 或 C++。如果您希望 .h 文件中的原型引用 C 符号名称,则它们在被解释为 C++ 时必须具有
extern "C",并且在被解释为 C 时不应具有extern "C"- 因此是#ifdef __cplusplus检查。
【问题讨论】: