Fortran和C的混合語言編程-授課版

Fortran和C的混合語言編程-授課版

ID:36875854

大小:811.50 KB

頁數(shù):24頁

時間:2019-05-10

Fortran和C的混合語言編程-授課版_第1頁
Fortran和C的混合語言編程-授課版_第2頁
Fortran和C的混合語言編程-授課版_第3頁
Fortran和C的混合語言編程-授課版_第4頁
Fortran和C的混合語言編程-授課版_第5頁
資源描述:

《Fortran和C的混合語言編程-授課版》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫

1、第十一章Fortran和C的混合語言編程第一節(jié)概述一.調(diào)用約定命名約定命名約定是為了解決不同語言對變量名、參數(shù)名、過程名和函數(shù)名等標(biāo)識符的不同處理,以及對名稱標(biāo)識符的不同長度限制等的有關(guān)規(guī)則、協(xié)議和約定.參數(shù)傳遞協(xié)議參數(shù)傳遞是指主調(diào)函數(shù)/例程與被調(diào)函數(shù)/例程之間的信息傳遞與交換過程,混合語言編程時需要考慮參數(shù)的傳遞通過值傳遞還是通過引用傳遞?被調(diào)函數(shù)以何種順序接收所傳遞給它的參數(shù)。第一節(jié)概述二、數(shù)據(jù)類型與例程的等價形式第一節(jié)概述二.Fortran和C的混合編程方式分別編譯、獨立運行將Fortran和C各自要實現(xiàn)的功能模塊源代碼在各自

2、的開發(fā)平臺上編譯連接成可執(zhí)行文件并獨立執(zhí)行,二者的數(shù)據(jù)通過數(shù)據(jù)文件交換。這種模式的實現(xiàn)最為簡單,容易掌握,但執(zhí)行效率較低;函數(shù)級調(diào)用Fortran和C分別編譯各自的功能模塊源代碼,得到各自的目標(biāo)文件(.obj),然后集成鏈接這些obj文件生成一個統(tǒng)一的可執(zhí)行文件,實現(xiàn)對對方函數(shù)的調(diào)用,數(shù)據(jù)交換通過約定接口來實現(xiàn)。這種方法的缺陷是被調(diào)用模塊一旦被修改,整個軟件必須重新進(jìn)行編譯連接。軟件的可維護(hù)性較差;動態(tài)鏈接庫方式將需要被調(diào)用的功能模塊源代碼編譯連接成動態(tài)連接庫,然后通過約定的接口動態(tài)使用另外的語言調(diào)用該功能模塊。這是目前普遍采用的一

3、種方式,動態(tài)連接庫(DLL)可以包含可執(zhí)行代碼、數(shù)據(jù)和各種資源,對其修改無需重新編譯主調(diào)程序,具有較好的移植性和復(fù)用性。第二節(jié)Fortran與C的函數(shù)級調(diào)用_stdcall第二節(jié)Fortran與C的函數(shù)級調(diào)用對于Fortran,可在接口塊的例程說明或例程頭部加入!MS$ATTRIBUTES編譯偽指令告知編譯器有關(guān)調(diào)用約定。其中,!MS$與!DEC$等同。對于C語言,要在函數(shù)說明前面加上extern關(guān)鍵字說明函數(shù)來自外部或供外部使用,extern和函數(shù)說明中間加上_cdecl或_stdcall說明調(diào)用約定的屬性。第二節(jié)Fortran與

4、C的函數(shù)級調(diào)用Fortran調(diào)用C的函數(shù)時,C的形參必須使用與Fortran實參同類型的指針變量,必須使用extern。!Fortran的接口塊INTERFACEFUNCTIONSUM(I,J)!MS$ATTRIBUTESC,ALIAS:'_Sum'::SUM!調(diào)用C語言的Sum函數(shù)!MS$ATTRIBUTESREFERENCE::I,JINTEGERI,J,SUMENDFUNCTIONENDINTERFACE/*C源程序*/externint_cdeclSum(int*,int*){…}第二節(jié)Fortran與C的函數(shù)級調(diào)用C調(diào)用F

5、ortran例程時,C的實參必須傳遞與Fortran形參同類型變量的地址,必須用extern!Fortran的例程SUBROUTINESUM(I,J)INTEGERI,J…ENDFUNCTION/*C源程序*/externint_cdeclSUM(int*,int*);intmain(){inta,b;…SUM(&a,&b);…}一.Fortran調(diào)用C語言函數(shù)例程調(diào)用約定如果C采用_cdecl方式的調(diào)用約定,它對應(yīng)于Fortran的C約定,C被調(diào)用的函數(shù)名nAme在其obj文件中保持混合大小寫,_nAme的形式出現(xiàn)在obj文件中。

6、Fortran的接口塊中必須用如下!MS$ATTRIBUTES編譯偽指令說明:!MS$ATTRIBUTESC,ALIAS:'_nAme'::NAME對應(yīng)的C語言源程序中,用如下語句說明函數(shù)Sum使用_cdecl屬性且用于文件外部:externintSum(int*p1,int*p2);或者externint_cdeclSum(int*p1,int*p2);一.Fortran調(diào)用C語言函數(shù)例程的調(diào)用約定如果C采用_stdcall方式的調(diào)用約定,它對應(yīng)于Fortran的STDCALL約定,C被調(diào)用的函數(shù)名nAme在其obj文件中保持混合

7、大小寫,以_nAme@n的形式出現(xiàn)在obj文件中。Fortran的接口塊用如下!MS$ATTRIBUTES編譯偽指令說明::!MS$ATTRIBUTESSTDCALL,ALIAS:'_nAme@n'::NAME對應(yīng)的C語言源程序中,用如下語句說明函數(shù)Sum使用_stdcall約定且用于文件外部:externint_stdcallSum(int*p1,int*p2);一.Fortran調(diào)用C語言函數(shù)參數(shù)的調(diào)用約定Fortran缺省參數(shù)傳遞為引用傳遞,若在外部例程中施加了C或STDCALL調(diào)用約定,則缺省的引用傳遞改為值傳遞(數(shù)組參數(shù)除

8、外)。為了消除調(diào)用約定對參數(shù)傳遞的影響,可以在外部例程中添加具體的參數(shù)傳遞屬性(REFERENCE或VALUE)聲明。若某形參為值傳遞,此時使用VALUE關(guān)鍵字:!MS$ATTRIBUTESVALUE::a!將a定義為值傳遞方式若某形

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。