function - 在fortran中的另一个函数内定义函数时出错

标签 function compiler-errors fortran

对于某些用途,我需要在 fortran 模块中的另一个函数中定义一个函数。
易于理解的示例代码是

module func
implicit none
contains

real function f(x,y)
real x,y,g

real function g(r)
real r
g=r
end function g

f=x*g(y)
end function f
end module func

use func
implicit none

write(*,*) f(1.0,1.0)
end

这在 gfortran 中给出了很多错误,例如意外的数据声明、预期的结束函数 f,而不是 g....等。

在fortran的另一个函数中定义一个函数的正确方法是什么?

最佳答案

您使用内部子程序,见下文。注意内部子程序本身不能包含内部子程序。

ian@eris:~/work/stack$ cat contained.f90
Module func

  Implicit None

Contains

  Real Function f(x,y)

    ! Interface explicit so don't need to declare g
    Real x,y

    f=x*g(y)

  Contains

    Real Function g(r)
      Real r
      g=r
    End Function g

  End Function f

End Module func

Program testit

  Use func

  Implicit None

  Write(*,*) f(1.0,1.0)

End Program testit
ian@eris:~/work/stack$ gfortran-8 -std=f2008 -Wall -Wextra -fcheck=all -O -g contained.f90 
ian@eris:~/work/stack$ ./a.out
   1.00000000    
ian@eris:~/work/stack$ 

关于function - 在fortran中的另一个函数内定义函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60995301/

相关文章:

c++ - '@' 在基于 ctime 的函数中打印出来

python - 当我运行这个时,我得到一个 "None"来回答而不是我的问题

java - 在 Java 中处理未初始化的字符串

inheritance - 了解 Fortran 扩展类型和覆盖

javascript - 在javascript中转换对象类型?

php函数所需参数混淆

compiler-errors - cx_Freeze 错误 : resource_filename() only supported for . 鸡蛋不是 .zip

c++ - 我收到错误 : "in function main: undefined reference to Fraction::Fraction()"

将单精度 float 转换为 double 以进行除法

fortran - 从整数转换为实数(dp)时自动分配失败