国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

extern "C"的作用

2019-11-06 06:03:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

extern"C"的作用:

(1) extern "C"使得在C++中使用C編譯方式成為可能,指明該函數(shù)使用C編譯方式。

(2) 使用extern"C" __declspec(dllexport)聲明導(dǎo)出函數(shù),在DLL中的函數(shù)名字保持與導(dǎo)出函數(shù)名一致。

(3) 使用__declspec(dllexport)聲明導(dǎo)出函數(shù),在DLL中的函數(shù)名字與導(dǎo)出函數(shù)名字不一致,有變化。這些差異主要是使用C方式還是C++方式編譯導(dǎo)致的。

(4) 使用_declspec (dllexport) 時(shí)cpp文件在編譯為OBJ文件時(shí)要對(duì)函數(shù)進(jìn)行重新命名,C語(yǔ)言會(huì)把函數(shù)name重新命名為_(kāi)name,而C++會(huì)重新命名為_(kāi)name@@decoration,在其前面加上extern "C"表示用C語(yǔ)言的方式重命名導(dǎo)出函數(shù)。

(5) 比如一個(gè)C語(yǔ)言源程序A.c要使用C++編寫的庫(kù)函數(shù),在A.c中#include"B.h",其中B.h中有要使用的函數(shù)的原形聲明func。當(dāng)編譯鏈接源程序時(shí),卻發(fā)現(xiàn)了“鏈接錯(cuò)誤,未決的外部符號(hào)...”的錯(cuò)誤,這是什么原因呢?

原因就是,C編譯器編譯A.c時(shí),將func編譯為func,當(dāng)鏈接時(shí)鏈接器去C++庫(kù)中尋找func,但是C++的編譯器在編譯庫(kù)時(shí)將func編譯成_func@yyy@rrr,自然鏈接器就找不著相應(yīng)的函數(shù)的信息了,所以就會(huì)報(bào)錯(cuò)!有什么辦法可以處理這種情況呢?——可以在編寫C++庫(kù)的時(shí)候,為導(dǎo)出函數(shù)加上extern "C",它的含義是告知C++編譯器在編譯這些函數(shù)的時(shí)候,以C編譯器的方式處理函數(shù)名。這樣生成的庫(kù)中的函數(shù)名字就是func了,當(dāng)C程序調(diào)用庫(kù)函數(shù),編譯鏈接時(shí),鏈接器就能找到期望的信息,則鏈接成功。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南陵县| 乌兰浩特市| 铁力市| 普安县| 郯城县| 班玛县| 特克斯县| 获嘉县| 滨海县| 富裕县| 汉阴县| 邵东县| 康平县| 隆回县| 崇州市| 汾阳市| 淮滨县| 丰原市| 黑龙江省| 滨州市| 泸水县| 津南区| 太仆寺旗| 依安县| 昌吉市| 容城县| 化隆| 尉犁县| 富民县| 铜梁县| 宜都市| 巢湖市| 松滋市| 阜南县| 民勤县| 林甸县| 龙口市| 山丹县| 秭归县| 高青县| 吴江市|