C与FORTRN混合编程2(写得挺好的).doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C与FORTRN混合编程2(写得挺好的)

发信人: jxbking (arcane), 信区: Fortran 标? 题: 偶总结的FORTRAN/C/C++混合编程,大家有兴趣就看看吧 发信站: 南京大学小百合站 (Fri Jun? 4 13:21:50 2004) C/C++/FORTRAN 混合编程 混合编程在软件编程中是经常遇到的问题,尤其是C/C++/FORTRAN的混合编程,本文主要说明以上三种语言混合编程中经常遇到的问题,同时,也说明了不同平台下混合编程应注意的问题。 混合语言编程要注意的问题主要体现在:函数调用和数据结构的存储。 1 Windows平台 函数:由于Fortran编程语言没有大小写之分,Windows平台下的混合语言编程要注意的主要是大小写的问题。考虑到编译器的差异,可以用下面的方式进行跨平台编程的函数声明。( C/C++编译器使用Microsoft Visual C++ 6.0, Fortran编译器使用 Digital Visual Fortran 6.0)。 假设一个C的函数为 void cFunction(); 那么,只需要在它的头文件里面进行如下定义即可: #ifdef? __cplusplus extern “C” void { #endif extern void __stdcall CFunction(); #define cFunction CFUNCTION #ifdef __cplusplus } #endif 这样,在Fortran或者C++的程序里面就可以直接调用了。 假设是一个Fortran函数SUBROUTINE FFUNCTION(); 那么,在C++头文件里进行如下的定义就可以了: #ifdef? __cplusplus extern “C” void { #endif extern void __stdcall ffunction(); #define ffunction FFUNCTION #ifdef __cplusplus } #endif 这样,就可以在C++的程序里面直接调用。由于C编译器里面,没有定义__cplusplus这个环境变量,因此,C文件里面,也可以直接使用这个头文件。 如果是一个C++函数,如: void cPlusplusFunction();和c函数一样,进行下面的定义即可: #ifdef? __cplusplus extern “C” void { #endif extern void __stdcall cPlusplusFunction (); #define cPlusplusFunction CPLUSPLUSFUNCTION #ifdef __cplusplus } #endif 经过上面的定义后,所有的函数便可以在三种语言中自由调用。 在三种语言的混合编程中,还要注意函数的参数:字符串的传递问题。 Windows平台上的Fortran和C/C++的混合语言编程里,字符串的处理需要特别注意。Fortran的一个字符变量是定长的字符串,没有特别的终止符号,这不像C/C++。关于怎样表示字符、怎样存储它们的长度没有固定的约定。有些编译器把一个字符参数作为一对参数传送给一个程序,其中之一是保存这个串的地址,另一个是保存串的长度。Fortran里面字符串的结束就是靠字符串的长度确定的。 对含有字符串的函数,可以这样处理: 例如函数 void cCharFunction( char *msg );需要定义成:void cCharFunction( char *msg , int len ); 经过上面的define之后,在Fortran中,只需调用CCHARFUNCTION( MSG )即可。由于Fortran程序没有明显得字符串结束标志,这样,如果两个字符串连在一起的话,C的程序里就会取到这个连在一起的字符串,因此,最好在C的程序里面,对这个由Fortran程序得到的字符串进行处理,因为,从len这个变量,可以得到字符串长度,截取msg的前len个字符作为这个字符串的应有长度。 而如果是在Fortran程序里面,如函数:SUBROUTINE FCHARFUNCTION(FCHAR);经过相应的声明,进行下面的定义即可: #define fCharFunction( fchar ), FCHARFUNCTION( fchar, strlen(fchar) ) 这样,在C/C++程序里即可直接调用。 在这三种语言的混合编程里,还有一个小问题就是指针的问题。Fortran里面所有的变量都相当于C/C++里面的指针,所以,在C/C++里面的程序里,函数的参数应一律声明成指针的形式(除了字符串参数后面的长度)。 数据:混合编程里,数据上存在的差异也必须引起足够的重视。

文档评论(0)

yuerang3062 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档