C与FORTRAN混合编程2(写得挺好的)

C与FORTRAN混合编程2(写得挺好的)

ID:41037093

大小:39.50 KB

页数:7页

时间:2019-08-14

C与FORTRAN混合编程2(写得挺好的)_第1页
C与FORTRAN混合编程2(写得挺好的)_第2页
C与FORTRAN混合编程2(写得挺好的)_第3页
C与FORTRAN混合编程2(写得挺好的)_第4页
C与FORTRAN混合编程2(写得挺好的)_第5页
资源描述:

《C与FORTRAN混合编程2(写得挺好的)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、发信人:jxbking(arcane),信区:Fortran标 题:偶总结的FORTRAN/C/C++混合编程,大家有兴趣就看看吧发信站:南京大学小百合站(FriJun 413:21:502004)C/C++/FORTRAN混合编程混合编程在软件编程中是经常遇到的问题,尤其是C/C++/FORTRAN的混合编程,本文主要说明以上三种语言混合编程中经常遇到的问题,同时,也说明了不同平台下混合编程应注意的问题。混合语言编程要注意的问题主要体现在:函数调用和数据结构的存储。1Windows平台函数:由于Fortran编程语言没有大小写之分,Wi

2、ndows平台下的混合语言编程要注意的主要是大小写的问题。考虑到编译器的差异,可以用下面的方式进行跨平台编程的函数声明。(C/C++编译器使用MicrosoftVisualC++6.0,Fortran编译器使用DigitalVisualFortran6.0)。假设一个C的函数为voidcFunction();那么,只需要在它的头文件里面进行如下定义即可:#ifdef __cplusplusextern“C”void{#endifexternvoid__stdcallCFunction();#definecFunctionCFUNCTION

3、#ifdef__cplusplus}#endif这样,在Fortran或者C++的程序里面就可以直接调用了。假设是一个Fortran函数SUBROUTINEFFUNCTION();那么,在C++头文件里进行如下的定义就可以了:#ifdef __cplusplusextern“C”void{#endifexternvoid__stdcallffunction();#defineffunctionFFUNCTION#ifdef__cplusplus}#endif这样,就可以在C++的程序里面直接调用。由于C编译器里面,没有定义__cplusp

4、lus这个环境变量,因此,C文件里面,也可以直接使用这个头文件。如果是一个C++函数,如:voidcPlusplusFunction();和c函数一样,进行下面的定义即可:#ifdef __cplusplusextern“C”void{#endifexternvoid__stdcallcPlusplusFunction();#definecPlusplusFunctionCPLUSPLUSFUNCTION#ifdef__cplusplus}#endif经过上面的定义后,所有的函数便可以在三种语言中自由调用。在三种语言的混合编程中,还要注意

5、函数的参数:字符串的传递问题。Windows平台上的Fortran和C/C++的混合语言编程里,字符串的处理需要特别注意。Fortran的一个字符变量是定长的字符串,没有特别的终止符号,这不像C/C++。关于怎样表示字符、怎样存储它们的长度没有固定的约定。有些编译器把一个字符参数作为一对参数传送给一个程序,其中之一是保存这个串的地址,另一个是保存串的长度。Fortran里面字符串的结束就是靠字符串的长度确定的。对含有字符串的函数,可以这样处理:例如函数voidcCharFunction(char*msg);需要定义成:voidcCharF

6、unction(char*msg,intlen);经过上面的define之后,在Fortran中,只需调用CCHARFUNCTION(MSG)即可。由于Fortran程序没有明显得字符串结束标志,这样,如果两个字符串连在一起的话,C的程序里就会取到这个连在一起的字符串,因此,最好在C的程序里面,对这个由Fortran程序得到的字符串进行处理,因为,从len这个变量,可以得到字符串长度,截取msg的前len个字符作为这个字符串的应有长度。而如果是在Fortran程序里面,如函数:SUBROUTINEFCHARFUNCTION(FCHAR);

7、经过相应的声明,进行下面的定义即可:#definefCharFunction(fchar),FCHARFUNCTION(fchar,strlen(fchar))这样,在C/C++程序里即可直接调用。在这三种语言的混合编程里,还有一个小问题就是指针的问题。Fortran里面所有的变量都相当于C/C++里面的指针,所以,在C/C++里面的程序里,函数的参数应一律声明成指针的形式(除了字符串参数后面的长度)。数据:混合编程里,数据上存在的差异也必须引起足够的重视。这体现在两个方面,数组和结构。数组:Fortran语言里面,数组和C/C++里面的

8、数组有些不同,这表现在两个方面,一是行列顺序,二是数组起始值。Fortran语言不同于C/C++的行优先,而使用列优先的方式。假设一个A数组,m行n列,那么采用行优先时的数据存放格式为:a11

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。