C、C++、Fortran混合编程技术研究与问题处理.docVIP

  • 4
  • 0
  • 约4.3千字
  • 约 7页
  • 2016-09-10 发布于北京
  • 举报

C、C++、Fortran混合编程技术研究与问题处理.doc

C、C++、Fortran混合编程技术研究与问题处理.doc

C、C++、Fortran混合编程技术研究与问题处理   【摘要】通过对C、C++、Fortran不同语言混合起来进行编程,利用各自在数字计算和可视化应用等方面的优势,达到优势互补,并对在C、C++、Fortran混合编程中经常遇到的一些问题及其处理方式进行研究,如字符串处理、文件读写处理、函数调用、数据结构的存储等。   【关键词】C;C++;Fortran;混合编程;字符串;文件读写;函数调用   对C、C++、Fortran不同语言混合起来进行编程,利用各自的优势,弥补各自功能的不足,如FORTRAN语言具有强大的科学数字计算功能,但绘图功能不强;而C、C++语言计算功能不强,但它具有良好的移植性和较强的图形功能,可将计算方式转变为数据输入简易、结果显示方便的Windows可视化应用程序,因此,在许多情况下,我们应该使用C、C++、Fortran等进行混合编程。在既要大量计算,又要图形处理的开发环境中,可以通过混合编程,达到优势互补。   1.混合编程开发平台及编译开发环境的选择   Fortran语言没有大小写之分,而Windows平台下的混合语言编程过程中大小写问题十分突出。考虑到编译器的差异,可以用以下方式进行跨平台编程的函数声明。C、C++编译器使用MicrosoftVisualC++6.0编译集成开发环境,Fortran编译器使用DigitalVisualFortran6.0编译集成开发环境。   VC++与FORTRAN的语言编译器同出自微软家族,且使用同一操作平台,因此在它们两者之间进行混合编程是完全可以实现的,但是必须充分考虑两种语言之间的接口问题,即在存储模式、语言约定、数据处理以及例程单位等方面的一致性问题。   存储模式的一致性。存储模式是指编译器应遵循的某种规则,这种规则是把程序的代码和数据装入存储器段中的一套预先制定的规则,它定义了编译器将代码和数据组织分段的方法,同时也规定了访问每段中代码和数据的寻址方法。一般来说PC机上有6种存储模式:微小模式(Tiny)、小模式(Small)、中模式(Medi-um)、紧凑模式(Compact)、大模式(Large)、巨模式(Huge)。对FORTRAN一般用大模式,而VC++至少是紧凑模式以上,因为FORTRAN采用段间或远程传址。   语言约定的一致性。混合编程时,要注意调用程序与被调用程序遵守同样的约定,不能发生冲突。这些约定包括命名约定、调用约定、参数传递约定和函数返回值约定。   命名约定,即在编程过程中相互匹配的标识符应保持一致。由于VC++语言严格区分大小写,而FORTRAN中不存在大小写问题,VC++中还存在类型说明及其它一些问题,如果命名约定在调用程序与被调用程序之间不一致,程序就不会成功地连接。FORTRAN的缺省方式使符号名在目标文件中变成大写,如果在VC++程序中调用一个使用FORTRAN缺省的FORTRAN子例程,在VC++中需用一个纯大写的名称来生成一个调用;当在VC++中用一个纯小写的名称来生成一个调用时,在FORTRAN程序中需用C和STDCALL属性将所有名称转换为纯小写的形式;在VC++中,当一个调用例程的名称以混合书写形式出现的时候,需使用FORTRAN的ALIAS属性来解决混合书写形式之间的命名冲突。   调用约定,指语言实现调用的规则及方法。调用约定可以从三个方面影响程序设计:首先是调用例程利用调用约定决定传递给另一个例程的自变量的顺序;其次是被调用的例程利用调用约定决定接收传递过来参数的顺序;第三是所有涉及堆栈这样一种数据结构的参数从椎栈中移去后,调用例程和被调用例程必须在调整堆栈的职责上取得一致。在VC++与FORTRAN语言混合编程时,两者之间的函数调用一般采用C与STDCALL调用约定。   假设一个C语言函数为voidcFunction(),那么只需要在它的头文件里面进行如下定义即可。   #ifdef_cplusplus   extern/C0void{   #endif   externvoid_stdcallCFunction();   #definecFunctionCFUNCTION   #ifdef_cplusplus   }   #endif   这样就可实现上述函数在Fortran或C++程序中的直接调用。   2.混合编程中的字符串处理   混合编程中经常会出现需要传递字符串的情况,而字符串的传递是一个较为麻烦的问题。在Fortran里,字符串是没有结束符的,但是有长度的概念,也就是说,编译器会给每一个字符串一个长度以控制,在Windows平台下用如下方法定义。   以C函数为例,定义如下。   voidmessag(char*ms

文档评论(0)

1亿VIP精品文档

相关文档