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
這篇文章被大量轉載,貌似很多轉載者既沒註明出處也沒註明作者,搜索了一下,應該上面這個鏈接是原始出處。即使不是最原始的,裏面也有作者信息。