3

入力と出力の両方を引数として受け取る関数をFortranで作成するにはどうすればよいですか?例えば:

fun(integer input,integer output)

出力値を利用したい。このようなことを試しましたが、出力変数が値を保持していません。

具体的には、入力と出力をパラメーターとして受け取るFortranからC関数を呼び出しています。入力値を正常に渡すことができますが、出力変数が値を取得していません。

4

2 に答える 2

5

Fortran ではfun()、サブルーチンと呼ばれます。関数は、次のような値を返すものです。

sin_of_x = sin(x)

したがって、最初に決定するのは、Fortran コードがどのアプローチを取るかです。おそらくサブルーチンを使用したいと思うでしょう。次に、議論の意図を整理します。

于 2009-08-26T11:05:36.517 に答える
4

例。void を返す関数が必要な場合は、代わりにサブルーチンを使用する必要があります。

function foo(input, output)
    implicit none
    integer :: foo
    integer, intent(in) :: input
    integer, intent(out) :: output

    output = input + 3
    foo = 0
end function

program test
    implicit none
    integer :: a, b, c, foo

    b = 5
    a = foo(b, c)

    print *,a,b, c

end program 

C ルーチンを呼び出している場合、シグネチャは参照を利用します。

$ cat test.f90 
program test
    implicit none
    integer :: a, b, c, foo

    b = 5
    a = foo(b, c)

    print *,a,b, c

end program 

$ cat foo.c 
#include <stdio.h>
int foo_(int *input, int *output) {
    printf("I'm a C routine\n"); 
    *output = 3 + *input;

    return 0;
}


$ g95 -c test.f90 
$ gcc -c foo.c 
$ g95 test.o foo.o 
$ ./a.out 
I'm a C routine
 0 5 8

文字列を使用すると、面倒になります。

于 2009-08-26T11:09:45.167 に答える