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