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); }。