资源描述:
《c、c++、fortran混合编程研究》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C、C++、Fortran混合编程研究第22卷第4期2007年12月洛阳大学JOURNAL0FLU0YANGUNIVERSlTYVo1.22No.4Dec.200r7C,C++,Fortran混合编程研究魏威,魏冲(郑州铁路职业技术学院,河南郑州450052)摘要:不同计算机编程语言都有其特有的优势和局限性,将多种语言混合起来进行编程,不但可以充分发挥各自的优势,而且可以弥补各自功能的不足,这样既能充分利用现有程序资源,又能加快应用程序的开发.主要阐述了C,C++,Fortran等3种语言在不同平台下混舍编程应注意的问题
2、,以及在混合编程中经常遇到的2个问题.关键词:混舍编程;C;C++;Fortran中图分类号:TP311文献标识码:A文章编号:1007—113X(2007)04—0094—05Fortran语言是所有编程语言中惟一能将复数定义为一种标准数据类型的语言,其优势在于数值计算,但是Fortran语言在可视化程序设计方面却是非常欠缺的,目前还没有一家厂商推出具有/tAD特性的Fortran编译集成开发环境.当用Fortran实现了某一大型科学计算以后,却难以将这种计算转变为数据输入简易,结果显示方便的Windows可视化应用程
3、序,而采用c,c++进行编程却比较容易实现这些功能.因此,在许多情况下,我们应该使用c,c++,Fortran等进行混合编程.在混合语言编程中,主要的问题是函数调用和数据结构的存储.1Windows平台的混合编程Fortran语言没有大小写之分,而Windows平台下的混合语言编程过程中大小写问题十分突出.考虑到编译器的差异,可以用以下方式进行跨平台编程的函数声明.c,c++编译器使用MicrosoftVisualc++6.0编译集成开发环境,Fortran编译器使用DigitalVisualFortran6.0编译集成
4、开发环境.假设一个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这个环境变量,因此在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的前len个字符作为这个字符串的应有长度.而在Fortran程序里面,如函数S
8、UBROUTINEFCHARFUNCTION(fehar),经过相应声明,进行下面的定义即可.#definefCharFunction(fchar),FCHARFUNCTION(fchar,strlen(fehar))这样,在C,C++程序里即可直接调用.在3种语言的混合编程里还有一个需要注意的问题就是指针问题.Fo