1 意图
extern "C"是C++特有的指令(C无法使用该指令),目的在于支持C++与C混合编程。
2 作用
extern “C”的作用是告诉C++编译器用C规则编译指定的代码(除函数重载外,extern “C”不影响C++其他特性)。
3 原因
为什么要用C规则编译C++代码呢?
因为C和C++的编译规则不一样,主要区别体现在编译期间生成函数符号的规则不一致。
可以看到,MyFunction.s(源文件为.c文件)中定义的是Function,而main.s(源文件为.cpp文件)中调用的是_Z8Functionii,函数名不一样,所以连接的时候找不到函数实现。到这里我们知道C和C++编译期间后得到的函数符号不同,所以C++代码和C代码不能互相调用。
要想实现C、C++混合编程该怎么办呢?让编译后的函数符号一致;
怎么一致呢?用extern "C"!
所以,extern “C”的作用就是告诉C++编译器,将指定的函数用C规则编译(注意,除了函数重载外,extern “C”不影响C++的其他特性),然后后面的事情就顺理成章了。
aaa.h
#ifdef __cplusplus extern "C" { #endif
#ifdef __cplusplus } #endif