C 言語と Fortran の混在 第弐弾2010年01月05日 17時25分40秒

C 言語と Fortran の関数呼び出しの違いは三つ。そして、二つ目は関数の引数の受渡し方。

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

前回次回