c++中的extern "C"

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

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

發佈了13 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章