可能重复:
Combining C++ and C - how does #ifdef __cplusplus work?
我在许多图书馆中遇到以下几行;他们有什么好处? if / where是__ cplusplus
定义的?
#ifdef __cplusplus
extern "C" {
#endif
//...
#ifdef __cplusplus
}
#endif
答案 0 :(得分:4)
__cplusplus
是为C ++代码定义的。有时您需要混合使用C代码和C ++代码。可能有很多原因,例如你有一个很久以前在C中编写的驱动程序,你想在你的全新C ++ 0x项目中使用它。
每个函数类型和名称都有一个语言链接。 C adn C ++函数之间存在差异,因为C没有函数名称重载,函数名称可以作为C中的唯一标识符,但不能在C ++中。这称为function mangling。
由于您不需要在C中修改名称,因此使用extern "C"
将使编译器省略添加链接的参数信息。
C ++标准明确规定了7.5第3段:
每个实现都应提供与写入的函数的链接 C编程语言,“C”,以及与C ++函数的链接,“C ++”。
complex sqrt(complex); //C++ linkage by default
extern "C" {
double sqrt(double);//C linkage
}