C语言转换为fortran语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C/C++采用的是缺省调用约定是STDCALL约定.在C程序中,可以在函数原型的声明中使用_stdcall关键字来指明过程采用STDCALL调用约定。
Fortran过程采用的缺省标识符是,全部大写的过程名加上“_”前缀和“@n”后缀。在C程序中保留标识符的大小写。编译程序会给采用STDCALL约定的过程标识符加上“_”前缀和“@n”后缀。
Fortran过程缺省的参数传递方式是引用方式是。对于下面这个Fortarn过程:SUBROUTINE ForSub(ivar,rvar)
INTEGER ivar
REAL rvar
WRITE(*,*) ivar,rvar
END
在C语言程序中应给出过程的函数原型及调用方式为:
void main()
{
extern void__stdcall FORSUB(int*I,float*f);
int iCV AR=1;
float rCV AR=2.0;
FORSUB(&iCV AR,&rCV AR);
}
在C++中调用Fortan的过程,在声明函数原型时需要用extern“C”语句,以避免C++编译程序对标识符的修饰;并且C++也可以通过引用方式传递参数。对于上面的Fortran过程,C++程序应给出的函数原型及调用方法是:
void main()
{
extern “C”{void__stdcall FORSUB(int*I,float*f);}
int iCV AR=1;
float rCV AR=2.0;
FORSUB(&iCV AR,&rCV AR);
}
另外,也可以在Fortran中用!MS$ATTRIBUTES编译伪指令来改变Fortran子过程的调用约定,以便于被其他语言的程序调用。在下面的例子中,过程ForSub具有C语言的调用约定。
SUBROUTINE ForSub(ivar,rvar)
!MS$ATTRIBUTES C::ForSub
INTEGER ivar
REAL rvar
WRITE(*,*) ivar,rvar
END
这样,这个过程使用的是C调用约定,并且参数传递方式也变为传值方式,过程的标识符变为全部小写且有_前缀而无后缀的方式。在C语言源程序中的函数原型及调用方法为:void main()
{
extern void FORSUB(int ivar,float rvar);
int iVar=1;
float fVar=2.0; FORSUB(iVar,fVar); }