C 言語と Fortran の混在 第弐弾 ― 2010年01月05日 17時25分40秒
C 言語のは「全ての引数は値渡し」で行なわれる。そのため、引数で渡した「値」を変更しても呼び出し側は変更の内容を見ることは出来ない。そのため、関数に引数を変更する副作用が欲しい場合は、値のアドレスを渡し、それへの参照を行なうことで参照渡しを疑似している。
Fortran では「全ての引数は参照渡し」で、実際に受け渡す値は「広域変数を通して行なわれる。」
C 言語から Fortran の関数を呼ぶ時は、Fortran の間数名に下線を付ける。Fortran から C 言語の関数を呼ぶ為には、C 言語の関数に下線を付けて命名する。
例えば、fthree を Fortran の関数として作る。
* Fortran function()
integer function addone(value)
integer value
addone = value + 1
end
C 言語の主関数から呼び出す。関数名の最後に下線を付ける。必ず参照渡しにする。
/* C */
int main()
{
int two = 2;
int three = addone_(&two);
}
今度は、addone を C 言語の関数として作る。この関数名には下線を付けておく。
/* C */
int addone_(int* value)
{
return *value + 1;
}
Fortran で cthree を呼ぶ時には、関数名の下線は必要無い。
* Fortran function
program main
integer two
integer three
two = 2
three = addone(two)
end program main
最近のコメント