“#ifdef __cplusplus extern "C" { #endif”的定义

平时我们在linux c平台开发的时候,引用了一些Cpp或者C的代码库,发现一些C的头文件有如下代码条件编译。

//xxx.h

#ifdef  __cplusplus
extern "C" {
#endif

// 代码

#ifdef  __cplusplus
}
#endif

 

主要作用:

为了在C++代码中调用用C写成的库文件,就需要用extern"C"来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们。

原因:

 C++支持函数重载,而C是不支持函数重载的,两者语言的编译规则不一样。编译器对函数名的处理方法也不一样。

假设有这个一个函数原型:

void func(int a,int b)
{
  //code  
}

可能在C++编译之后会产生_func_int_int之类的名字,因为C++支持重载。而C编译之后,可能为_func。

你可能感兴趣的:(C/C++,iOS开发)