【问题标题】:error when defining function inside another function in fortran在fortran中的另一个函数内定义函数时出错
【发布时间】:2020-04-03 00:38:59
【问题描述】:

对于某些用途,我需要在 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 中定义另一个函数内的函数的正确方法是什么?

【问题讨论】:

  • 您可以将g 设为f 的内部函数。或者,鉴于您的示例很简单,您可以使用 语句函数。前者是首选,后者已过时。

标签: function compiler-errors fortran


【解决方案1】:

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

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$ 

【讨论】:

  • 是否存在内部子程序不能调用外部函数的情况?在我的原始代码中,当我尝试在子程序部分中使用外部函数时,正如您在答案中所说,在另一个模块中定义时,gfortran 说的是未定义的引用......有没有这样的事情?
  • 需要真正看到错误信息和你做了什么。但是,根据描述,您要么忘记链接库或目标文件。
猜你喜欢
  • 1970-01-01
  • 2018-07-04
  • 2014-06-07
  • 2015-01-16
  • 2018-12-21
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多