入力と出力の両方を引数として受け取る関数をFortranで作成するにはどうすればよいですか?例えば:
fun(integer input,integer output)
出力値を利用したい。このようなことを試しましたが、出力変数が値を保持していません。
具体的には、入力と出力をパラメーターとして受け取るFortranからC関数を呼び出しています。入力値を正常に渡すことができますが、出力変数が値を取得していません。
入力と出力の両方を引数として受け取る関数をFortranで作成するにはどうすればよいですか?例えば:
fun(integer input,integer output)
出力値を利用したい。このようなことを試しましたが、出力変数が値を保持していません。
具体的には、入力と出力をパラメーターとして受け取るFortranからC関数を呼び出しています。入力値を正常に渡すことができますが、出力変数が値を取得していません。
Fortran ではfun()
、サブルーチンと呼ばれます。関数は、次のような値を返すものです。
sin_of_x = sin(x)
したがって、最初に決定するのは、Fortran コードがどのアプローチを取るかです。おそらくサブルーチンを使用したいと思うでしょう。次に、議論の意図を整理します。
例。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
文字列を使用すると、面倒になります。