在 Fortran 95 中按值传递参数

Ant*_*iro 2 fortran parameter-passing fortran95

如何在调用函数参数时保留其值而不创建新变量?这就是,如何按值传递参数?

在此示例代码中:

program what
  implicit none  
  integer :: a, b, c, d

  a = 1
  b = 2
  c = 3

  print *, a,b,c

  d = f(val(a), val(b), val(c))

  print *, d

  print *, a,b,c

  d = f(a, b, c)

  print *, d

contains

  function f(x,y,z) result(h)
    integer:: x,y,z
    integer :: h

    h = x+y+z
    x = 0
    y = 0
    z = 0
  end function
end program
Run Code Online (Sandbox Code Playgroud)

当我第二次调用该函数时,它只打印 0。

Vla*_*r F 5

在 Fortran 95 中没有办法。除了一些非常非标准的扩展,但它们不是 Fortran 95 或任何其他 Fortran,只是扩展。

在 Fortran 2003 中使用该value属性。

function f(x,y,z) result(h)

integer, value :: x,y,z
Run Code Online (Sandbox Code Playgroud)

该属性需要显式接口,但您的示例有它,所以没关系。