資源描述:
《c、c++、fortran混合編程研究》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、C、C++、Fortran混合編程研究第22卷第4期2007年12月洛陽大學JOURNAL0FLU0YANGUNIVERSlTYVo1.22No.4Dec.200r7C,C++,Fortran混合編程研究魏威,魏沖(鄭州鐵路職業(yè)技術學院,河南鄭州450052)摘要:不同計算機編程語言都有其特有的優(yōu)勢和局限性,將多種語言混合起來進行編程,不但可以充分發(fā)揮各自的優(yōu)勢,而且可以彌補各自功能的不足,這樣既能充分利用現有程序資源,又能加快應用程序的開發(fā).主要闡述了C,C++,Fortran等3種語言在不同平臺下混舍編程應注意的問題
2、,以及在混合編程中經常遇到的2個問題.關鍵詞:混舍編程;C;C++;Fortran中圖分類號:TP311文獻標識碼:A文章編號:1007—113X(2007)04—0094—05Fortran語言是所有編程語言中惟一能將復數定義為一種標準數據類型的語言,其優(yōu)勢在于數值計算,但是Fortran語言在可視化程序設計方面卻是非常欠缺的,目前還沒有一家廠商推出具有/tAD特性的Fortran編譯集成開發(fā)環(huán)境.當用Fortran實現了某一大型科學計算以后,卻難以將這種計算轉變?yōu)閿祿斎牒喴?結果顯示方便的Windows可視化應用程
3、序,而采用c,c++進行編程卻比較容易實現這些功能.因此,在許多情況下,我們應該使用c,c++,Fortran等進行混合編程.在混合語言編程中,主要的問題是函數調用和數據結構的存儲.1Windows平臺的混合編程Fortran語言沒有大小寫之分,而Windows平臺下的混合語言編程過程中大小寫問題十分突出.考慮到編譯器的差異,可以用以下方式進行跨平臺編程的函數聲明.c,c++編譯器使用MicrosoftVisualc++6.0編譯集成開發(fā)環(huán)境,Fortran編譯器使用DigitalVisualFortran6.0編譯集成
4、開發(fā)環(huán)境.假設一個c語言函數為voidcFunction(),那么只需要在它的頭文件里面進行如下定義即可.#ffdef..cplusplusextem"C"void{始endifexternvoid—stdcallCFunction();#definecFunctionCFUNCTION#ifdef_cplusplus}#endff這樣就可實現上述函數在Fortran或c++程序中的直接調用.假設一個Fortran函數為SUBROUTINEFFUNCTION(),那么在c++頭文件里可進行如下定義.#ffdef..cpl
5、usplusextern"C"void{確lendifexternvoid—stdcallffunction();#defineffunctionFFUNCTION#ifdef_cplusplus收稿日期:2007—11—01作者簡介:魏威(1960一),女,漢族,河南省鄭州市人,工程師,研究方向:計算機技術第4期魏威等:C,C++,Fortran混合編程研究?95?}#endif這樣,就可以在c++的程序里面直接調用上述函數.由于c編譯器里面沒有定義cplusplus這個環(huán)境變量,因此在c文件里面也可以直接使用這個頭文
6、件.如果是一個C++函數voidcPlusplusFunction(),和C函數一樣可定義如下.#ifdef—cplusplusextem"C''void#endifextemvoid—stdcallcPlusplusFunction();#definecPlusplusFuncti0nCPLUSPLUSFUNCT10N#ifdef—cplusplus}#endif經過上面的定義后,所有的函數便可實現在3種語言問自由調用.在用3三種語言進行混合編程過程中要注意函數的參數,字符串的傳遞問題.對含有字符串的函數,如函數voi
7、dcCharFunction(char,l:msg),需要定義如下.voidcCharFunction(char,l:msg,intlen)經過上面的定義之后,在Fortran中只需調用cCharFunction(msg)即可.由于Fortran程序沒有明顯的字符串結束標志,如果是2個字符串連在一起,c程序里就只能得到1個字符串.所以,最好在c的程序里對這個由Fortran程序得到的字符串進行處理,因為從len變量可以得到字符串長度,截取msg的前l(fā)en個字符作為這個字符串的應有長度.而在Fortran程序里面,如函數S
8、UBROUTINEFCHARFUNCTION(fehar),經過相應聲明,進行下面的定義即可.#definefCharFunction(fchar),FCHARFUNCTION(fchar,strlen(fehar))這樣,在C,C++程序里即可直接調用.在3種語言的混合編程里還有一個需要注意的問題就是指針問題.Fo