Fortran函数和返回值

Fortran函数和返回值,fortran,Fortran,如何用Fortran编写一个函数,将输入和输出都作为参数?例如: fun(integer input,integer output) 我想利用输出值。我尝试过类似的方法,但输出变量不包含该值 具体地说,我正在从Fortran调用一个C函数,该函数将输入和输出作为参数。我能够成功地传递输入值,但输出变量没有获取值。您的乐趣()是Fortran程序员(如我)调用的子程序(是的,我们也在Fortran town中喊出我们的关键字)。函数是一种返回值的东西,如下所示: sin_of_x = sin(x

如何用Fortran编写一个函数,将输入和输出都作为参数?例如:

fun(integer input,integer output)
我想利用输出值。我尝试过类似的方法,但输出变量不包含该值

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

您的乐趣()是Fortran程序员(如我)调用的子程序(是的,我们也在Fortran town中喊出我们的关键字)。函数是一种返回值的东西,如下所示:

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
$cat test.f90
程序测试
隐式无
整数::a,b,c,foo
b=5
a=foo(b,c)
打印*,a,b,c
结束程序
$cat foo.c
#包括
int foo_u2;(int*输入,int*输出){
printf(“我是一个C例程\n”);
*输出=3+*输入;
返回0;
}
$g95-c测试。f90
$gcc-c foo.c
$g95测试o foo.o
美元/年
我是一个C程序
0 5 8

如果你使用字符串,事情会变得一团糟。

你能粘贴fortran和c签名吗?请问fortran函数和子程序之间唯一实际的区别是子程序不返回值吗?@NOUT101:不,还有其他区别,但我已经积攒了两年的锈迹,所以我不再记得细节了。