我在许多图书馆都遇到过以下几行;它们有什么用?__何时/何cplusplus
地定义?
#ifdef __cplusplus
extern "C" {
#endif
//...
#ifdef __cplusplus
}
#endif
我在许多图书馆都遇到过以下几行;它们有什么用?__何时/何cplusplus
地定义?
#ifdef __cplusplus
extern "C" {
#endif
//...
#ifdef __cplusplus
}
#endif
__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
}