Fortran函数和返回值

时间:2009-08-26 10:48:52

标签: fortran

如何在Fortran中编写一个以输入和输出作为参数的函数?例如:

fun(integer input,integer output)

我想利用输出值。我尝试过类似的东西,但输出变量没有保留值。

具体来说,我从Fortran调用一个C函数,它将输入和输出作为参数。我能够成功传递输入值,但输出变量没有获取值。

2 个答案:

答案 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

如果使用字符串,事情会变得混乱。