在另一个子程序中定义一个子程序
Defining a subroutine in another subroutine
在 Fortran 中是否可以在另一个子例程中定义一个子例程?当我尝试
SUBROUTINE test1(...)
! do some stuff
CALL test2(...)
SUBROUTINE test2(...)
! do some stuff
END SUBROUTINE test2
END SUBROUTINE test1.
我的编译器 (Silverfrost) 给我一个递归错误。
正如 HighPerformanceMark 评论的那样,可以在另一个过程的包含部分中定义一个内部过程
SUBROUTINE test1(...)
! do some stuff
CALL test2(...)
CONTAINS
SUBROUTINE test2(...)
! do some stuff
END SUBROUTINE test2
END SUBROUTINE test1
内部过程 test2
通过 主机关联 访问主机过程 test1
中定义的所有实体。它还可以访问 test1
有权访问的所有实体。规则与主程序内部程序规则类似。
一个内部过程不能承载另一个内部过程。
指向内部过程的过程指针仅在宿主过程执行期间有效,并且仅允许在 Fortran 2008 及更高版本中使用。这是一项高级功能。
这个主机关联有时会很烦人,您必须保持警惕以避免出现以下错误:
SUBROUTINE test1(...)
integer :: i
do i = 1, n
CALL test2(...)
end do
CONTAINS
SUBROUTINE test2(...)
do i = 1, n
!i here is the same variable as i in test1!!
end do
END SUBROUTINE test2
END SUBROUTINE test1
Fortran 2015 中将提供更改主机关联行为的功能。
在 Fortran 中是否可以在另一个子例程中定义一个子例程?当我尝试
SUBROUTINE test1(...)
! do some stuff
CALL test2(...)
SUBROUTINE test2(...)
! do some stuff
END SUBROUTINE test2
END SUBROUTINE test1.
我的编译器 (Silverfrost) 给我一个递归错误。
正如 HighPerformanceMark 评论的那样,可以在另一个过程的包含部分中定义一个内部过程
SUBROUTINE test1(...)
! do some stuff
CALL test2(...)
CONTAINS
SUBROUTINE test2(...)
! do some stuff
END SUBROUTINE test2
END SUBROUTINE test1
内部过程 test2
通过 主机关联 访问主机过程 test1
中定义的所有实体。它还可以访问 test1
有权访问的所有实体。规则与主程序内部程序规则类似。
一个内部过程不能承载另一个内部过程。
指向内部过程的过程指针仅在宿主过程执行期间有效,并且仅允许在 Fortran 2008 及更高版本中使用。这是一项高级功能。
这个主机关联有时会很烦人,您必须保持警惕以避免出现以下错误:
SUBROUTINE test1(...)
integer :: i
do i = 1, n
CALL test2(...)
end do
CONTAINS
SUBROUTINE test2(...)
do i = 1, n
!i here is the same variable as i in test1!!
end do
END SUBROUTINE test2
END SUBROUTINE test1
Fortran 2015 中将提供更改主机关联行为的功能。