1.什么时候用
1) c++要引用c编译的函数或者变量
2 )c要引用c++编译的函数或者变量
2.为什么要用
两种语言对函数的编译方式差异:
c中仅将函数名作为特征符,而c++为了实现重载,将函数名+参数列表作为特征符。
比如函数 int f(int a);
C中特征符类似_f
C++中特征符类似_f_int
所以两种语言在互相引用的时候,要通过extern "C"明确告诉编译器应该如何生成函数特征符。否则就会找不到,比如用_f_int去搜索_f肯定是找不到的。
3.怎么用
1)c++引用c编译的代码
c语言头文件--F.H
#ifndef C_HEADER
#define C_HEADER
extern int f(int a);
#end if
c++中引用--CALL_F.CPP
extern "C"{
#include "F.H"
}
int main(){
f(1);
return 0;
}
2)c引用c++编译的代码
c++语言头文件--F.H
#ifndef CPP_HEADER
#define CPP_HEADER
extern "C" int f(int a);
#end if
c中引用--CALL_F.C
extern int f(int a);//not include
int main(){
f(1);
return 0;
}
4.更详细的了解可以参考
C++中extern “C”含义深层探索
http://www.pconline.com.cn/pcedu/empolder/gj/c/0508/693175.html
这篇文章被大量转载,貌似很多转载者既没注明出处也没注明作者,搜索了一下,应该上面这个链接是原始出处。即使不是最原始的,里面也有作者信息。