extern ¨C¨对C++和C混合编译的支持


C关键字extern除了对全局变量和函数的修饰作用外,在C++和C的混合编译中也承担着重要角色。初次接触混合编译的程序员经常遇到的一个问题就是 在C++环境下使用C函数的时候,常常出现编译器无法找到C函数定义的链接错误。其原因就是因为C++语言为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称(mangled name)。此时对C函数用extern “C”进行链接指定,告诉编译器,按照C语言的命名习惯在库中查找函数。

经常写成以下格式:
#ifdef __cplusplus
extern "C"{
#endif
 …
 …
#ifdef __cplusplus
}
#endif

extern "C" 是C++的语法, 在C语言中不能直接引用,否则编译报错。

相关内容