为什么不应该extern "C"
对于需要被定义为C函数的函数来指定?将文件编译为C源代码时对编译器有什么影响?我们可以在没有#ifdef __cplusplus的情况下在C文件中使用extern“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符号名称,那么它们必须有
extern "C"
时,被解释为C++,他们不应该有extern "C"
时,被解释为C - 因此#ifdef __cplusplus
检查。
谢谢。我不知道这是一个C++构造。 – Alexander 2012-02-29 12:31:22