extern“C”,它有什么用?

时间:2012-09-24 11:49:18

标签: c++ c c-preprocessor

  

可能重复:
  Combining C++ and C - how does #ifdef __cplusplus work?

我在许多图书馆中遇到以下几行;他们有什么好处? if / where是__ cplusplus定义的?

#ifdef __cplusplus
    extern "C" {
#endif

//...

#ifdef __cplusplus
    }
#endif

1 个答案:

答案 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
}