如果引用多個(gè),那么就如下所示
創(chuàng)新互聯(lián)建站專注于蒼南網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供蒼南營(yíng)銷型網(wǎng)站建設(shè),蒼南網(wǎng)站制作、蒼南網(wǎng)頁(yè)設(shè)計(jì)、蒼南網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造蒼南網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供蒼南網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
extern “C”{
#include “ s.h”
#include “t.h”
#include “g.h”
#include “j.h”};
然后在調(diào)用這些函數(shù)之前,需要將函數(shù)也全部聲明一遍。2.
C++調(diào)用C函數(shù)的方法,將用到的函數(shù)全部重新聲明一遍
extern “C”{
extern void A_app(int);
extern void B_app(int);
extern void C_app(int);
C++語(yǔ)言支持函數(shù)重載,C語(yǔ)言不支持函數(shù)重載。函數(shù)被C++編譯后在庫(kù)中的名字與C語(yǔ)言的不同。假設(shè)某個(gè)C 函數(shù)的聲明如下:
void foo(int x, int y);
該函數(shù)被C 編譯器編譯后在庫(kù)中的名字為_foo,而C++編譯器則會(huì)產(chǎn)生像_foo_int_int之類的名字用來(lái)支持函數(shù)重載和類型安全連接。由于編譯后的名字不同,C++程序不能直接調(diào)用C 函數(shù)。C++提供了一個(gè)C 連接交換指定符號(hào)extern“C”來(lái)解決這個(gè)問題。例如:
extern “C”{
void foo(int x, int y);
// 其它函數(shù)}或者寫成
extern “C”{
#include “myheader.h”
// 其它C 頭文件}
這就告訴C++編譯譯器,函數(shù) foo 是個(gè)C 連接,應(yīng)該到庫(kù)中找名字_foo 而不是找_foo_int_int。
調(diào)用系統(tǒng)的是
#include ****** //如果是vc6 才是*****.h; 更高版本編譯器是不加 點(diǎn)h 的
調(diào)用自己寫的頭文件是
#include " "
函數(shù)庫(kù)是
pragma *.lib
如果是標(biāo)準(zhǔn)庫(kù)函數(shù), 都已經(jīng)封裝好了,直接引用對(duì)應(yīng)頭文件, 調(diào)用即可
如果是自己寫的C文件, 調(diào)用的時(shí)候 需要加上extern "C"聲明
首先,要在C++的函數(shù)前面加extern
"C",這樣的函數(shù)才能被其他語(yǔ)言調(diào)用。當(dāng)然還得要求形參類型和返回類型都是C語(yǔ)言支持的類型。
其次,在把兩種語(yǔ)言的.o文件鏈接在一起的時(shí)候,gcc要加選項(xiàng)-lstdc++。
祝你成功!
有類沒關(guān)系,只要你這個(gè)要引出的函數(shù)不是類里面的函數(shù),就可以供C語(yǔ)言程序調(diào)用。
,但是具體還是有些差別的。 先對(duì)C中調(diào)用C++代碼作個(gè)簡(jiǎn)單回顧:1、對(duì)于C++中非類的成員函數(shù),可以簡(jiǎn)單的在 函數(shù)聲明前面加extern C ,通常函數(shù)聲明位于頭文件中,當(dāng)然也可以 將聲明和函數(shù)定義一起放在cpp中 ,在沒有聲明的情況下,直接在定義前添加extern C也可2、對(duì)于C++類的成員函數(shù),則 需要另外做一個(gè)cpp文件,將需要調(diào)用的函數(shù)進(jìn)行包裝。 要實(shí)現(xiàn)C++中調(diào)用C的代碼,具體操作:對(duì)于C中的函數(shù)代碼,要么將C代碼的頭文件進(jìn)行修改,在其被含入C++代碼時(shí)在聲明中加入extern C或者在C++代碼中重新聲明一下C函數(shù),重新聲明時(shí)添加上extern C頭。 通過以上的說(shuō)明,我明白一點(diǎn),那就是加extern C頭一定是加在C++的代碼文件中才能起作用的。 下面分析一下這個(gè)現(xiàn)象的實(shí)質(zhì)原因:C編譯器編譯函數(shù)時(shí)不帶函數(shù)的類型信息,只包含函數(shù)符號(hào)名字,如C編譯器把函數(shù) int a(float x)編譯成類似_a這樣的符號(hào),C連接器只要找到了調(diào)用函數(shù)的符號(hào),就可以連接成功,它假設(shè)參數(shù)類型信息是正確的,這是C編譯連接器的缺點(diǎn)。而C++編譯器為了實(shí)現(xiàn)函數(shù)重載,編譯時(shí)會(huì)帶上函數(shù)的類型信息,如他把上面的a函數(shù)可能編譯成_a_float這樣的符號(hào)為了實(shí)現(xiàn)重載,注意它還是沒有帶返回值得信息,這也是為什么C++不支持采用函數(shù)返回值來(lái)區(qū)別函數(shù)重載的原因之一,當(dāng)然,函數(shù)的使用者對(duì)函數(shù)返回值的處理方式(如忽略)也是重要原因。 基于以上,C調(diào)用C++ ,首先需要用封裝函數(shù)把對(duì)C++的類等的調(diào)用封裝成C函數(shù)以便C調(diào)用,于是extern "C"的作用是:讓編譯器知道這件事,然后以C語(yǔ)言的方式編譯和連接封裝函數(shù)(通常是把封裝函數(shù)用C++編譯器按C++方式編譯,用了extern "C"后,編譯器便依C的方式編譯封裝接口,當(dāng)然接口函數(shù)里面的C++語(yǔ)法還是按C++方式編譯;對(duì)于C語(yǔ)言部分--調(diào)用者,還是按C語(yǔ)言編譯
新聞名稱:c加加調(diào)用c語(yǔ)言函數(shù),加法函數(shù)C語(yǔ)言
當(dāng)前鏈接:http://jinyejixie.com/article46/dsseehg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、手機(jī)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、網(wǎng)站制作、靜態(tài)網(wǎng)站、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)