0

可能重复:
结合 C++ 和 C - #ifdef __cplusplus 如何工作?

我在许多图书馆都遇到过以下几行;它们有什么用?__何时/何cplusplus地定义?

#ifdef __cplusplus
    extern "C" {
#endif

//...

#ifdef __cplusplus
    }
#endif
4

1 回答 1

4

__cplusplus是为 C++ 代码定义的。有时您必须混合使用 C 代码和 C++ 代码。这可能有很多原因,例如,您有一个很久以前用 C 语言编写的驱动程序,您想在全新的 C++0x 项目中使用它。

每个函数类型和名称都有一个语言链接。C 和 C++ 函数之间存在差异,因为 C 没有函数名重载,所以函数名可以作为 C 中的唯一标识符,但不能在 C++ 中。这称为函数修饰

由于您不需要在 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
}
于 2012-09-24T11:51:20.617 回答