extern "C" 含义,C和C++混合编程

extern "C" 含义,C和C++混合编程

1.为什么标准头文件中都有如下结构(比如stdio.h文件):
#ifndef _INC_STDIO      //这个宏防止头文件被重复包含      
#define _INC_STDIO
#ifdef __cplusplus      //保证能同时被C编译器和C++编译器调用。
extern "C" {
#endif
/*...
.....
*/
#ifdef __cplusplus
}
#endif
#endif /* _INC_STDIO*/

在C++中,extern "C"的作用是告诉C++编译器对它声明的函数编译时要按照C编译器的方式,这样才能保证在链接时找到对应的函数。

比如对于函数:

void foo( int x, int y );

C编译方式:函数名变为_foo
C++的编译方式:函数名变为_foo_int_int【这也说明了为什么C++支持函数重载。】

实际上,C++中的extern "C"是对关键字extern 的重载【extern关键字使得函数/变量可以被其它文件访问,与static正好相反。】,extern "C"的功能是改变C++的编译方式。

2.C/C++混合编程:

(1)如果C++调用一个C语言编写的.DLL时,在包含.DLL的头文件前,应加extern "C" ,如下所示:
extern "C"  //由于标准头文件里面都已经加上了extern "C",如上述1所示,所以我们不用再加了。
{
#include "cExample.h"
}
(2)在C中引用C++编写的函数库时,C++的头文件中的函数前需添加extern "C",而且在C程序中不能直接包含该头文件,应该在C程序的函数前加上extern关键字。

你可能感兴趣的:(extern "C" 含义,C和C++混合编程)