Fortran/混合語言
外觀
< Fortran
Fortran 型別與其他編譯語言中的內建型別很好地匹配。以下是一個 Fortran 到 C 型別的表格
Fortran C
======= =
COMMON extern struct
INTEGER*1 signed char
INTEGER*2 short
INTEGER*4 long
INTEGER*8 long long
INTEGER int
REAL float
REAL*4 float
REAL*8 double
REAL*16 long double
LOGICAL int
LOGICAL*n char [n]
CHARACTER*n char [n]
DOUBLE PRECISION double
COMPLEX float [2]
COMPLEX*8 float [2]
COMPLEX*16 double [2]
COMPLEX*32 long double [2]
Fortran 陣列在記憶體中的佈局與 C 和許多基於 C 的語言中的陣列形成對比。在 C 中迭代連續的陣列元素時,最右邊的陣列下標變化最快,而在 Fortran 中,最左邊的陣列下標變化最快。因此,在連續記憶體中,x(1,1) 之後的元素是 x(2,1),而不是 x(1,2)。此外,C 中的元素下標從 0 開始,而 Fortran 預設從 1 開始。Fortran 中的元素可能是 x(1),而在 C 程式碼中,等效的值是 x[0]。但是,當將 Fortran 陣列傳遞給 C 函式時,您不需要(也不應該)先將陣列重新排列成 C 風格的下標;編譯器會自動為您完成此操作。
請參閱 公共塊 部分。
許多語言將它們的引數推入堆疊,一些作為常量,一些作為地址。在大多數編譯器中,Fortran 將編譯一個指向變數和常量的指標塊,並推入該塊的地址。因此,如果我們有一個如下定義的 Fortran 過程
subroutine my_sub(i, j, x)
那麼 C 定義將是
struct my_sub_args {
int *i;
int *j;
float *x;
} my_sub_args = {&i, &j, &x};
void my_sub(my_sub_args*);
C 程式碼可以如下呼叫該例程
my_sub(&my_sub_args);
在 PL/1 中,您可以定義一個外部公共塊、子程式或過程為 FORTRAN 型別。當您這樣做時,從下標順序到所有內容都會為您處理。同樣,您可以定義一個 PL/1 專案(例如子程式)為 FORTRAN 型別,然後它就可以使用 Fortran 的呼叫約定由 Fortran 呼叫。