extern "C"的用法
一、C++与C的编译差异
- C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。
- extern "C"是告诉C++编译器以C Linkage方式编译,也就是抑制C++的name mangling机制。
例如:void Test(void);C++编译器可能实际把它改名为vTest_v,C++的重载/namespace等机制就是这样来的。
二、使用方法
- 在C++中调用单个C的函数
extern "C" void Test(void);
- 在C++中调用多个C的函数
#ifdef __cplusplus
extern "C" {
#endif
void Test1(void);
void Test2(void);
/*......此处填入多个C语言的函数声明......*/
#ifdef __cplusplus
}
#endif
- 包含头文件,相当于头文件中的声明都加了extern “C”
extern "C"
{
#include <test.h> //相当于整个test.h的头文件中的函数都是按照C的方式进行编译的
}