如何在Fortran中编写一个以输入和输出作为参数的函数?例如:
fun(integer input,integer output)
我想利用输出值。我尝试过类似的东西,但输出变量没有保留值。
具体来说,我从Fortran调用一个C函数,它将输入和输出作为参数。我能够成功传递输入值,但输出变量没有获取值。
答案 0 :(得分:6)
你的乐趣()是Fortran程序员,比如我,称为SUBROUTINE(是的,我们也在Fortran-town中喊出我们的关键词)。一个FUNCTION是一个像这样的回报:
sin_of_x = sin(x)
因此,您的第一个决定是您的Fortran代码采用哪种方法。您可能想要使用SUBROUTINE。然后整理你的论点的意图。
答案 1 :(得分:3)
一个例子。如果你想要一个返回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
如果使用字符串,事情会变得混乱。