三种形式:参数传递、公用数据、模块方式
1.参数传递
参数的传递有两种方式:传值传递和引用传递。
FORTRAN缺省约定:引用传递(地址)
C++缺省约定:传值传递
在混合编程中必须保证参数传递方法的一致性。
注意在C++调用FORTRAN的过程中,如要传递字符串,则每个字符变量后应加一整型变量,但在FORTRAN中不能体现。
2.公用数据
FORTRAN公共区与C++的结构,三种情况:
a>单参数公共区数据的访问:用FORTRAN中的公共区名,作为C++的变量名。
FORTRAN:
COMMON /PI/PI_VALUE
C++:
extern “C” float PI;
b>多参数的公共区数据的访问(4字节*n)
FORTRAN:
COMMON /DataComm/Dat1,Dat2(2)
C++:
extern “ C” struct{
float Dat1;
float Dat2[2];
}DATACOMM;
c>多参数的公共区数据的访问(非4字节*n)
使用pack(2)指令,可改变C++存储方式,使它与FORTRAN公共区一致。
FORTRAN:
CHARACTER*10 ch
COMMON/Really/ch,x,y,z(6)
C++:
#pragma pack(2)
extern “c” struct{
char ch[10];
float x,y,z[6];
}REALLY;
#pragma()
注意:在C++中的结构变量名,要大写。
3.使用模块访问数据
主要是对访问对象的名称问题。
FORTRAN(例:ModData)
MODULE ModData
REAL A(3)
END MODULE ModData
USE ModData声明
C++:
extern “C” {
float ModData_mp_A[3];
};