【问题标题】:Handing optional parameters to subroutines [duplicate]将可选参数传递给子程序[重复]
【发布时间】:2019-01-18 00:19:03
【问题描述】:

我有两个子程序。一个调用另一个,并且两者都有相同的可选参数:

program main
    call a()
    call a(7)

contains
    subroutine a(var)
        implicit none
        integer, intent(in), optional   :: var

        call b(var)
    end subroutine

    subroutine b(var)
        implicit none
        integer, intent(in), optional   :: var

        if(present(var)) then
            write (*,*) "var =  ", var
        else
            write (*,*) "not given"
        endif
    end subroutine
end program main

a 的第一次调用中,将var 提供给b,即使它没有提供。我在 gfortran 和 ifort 中尝试过,它似乎有效。不过我想知道:

这是有效的标准 fortran 还是我只是在这里滥用一些漏洞?

【问题讨论】:

    标签: fortran optional-parameters


    【解决方案1】:

    我们多次使用,但您的问题导致我也验证它。

    根据现代 Fortran 解释(第 5.13 章)中的 Metcalf、Reid 和 Cohen,它是有效代码。可选参数可以通过任意数量的后续调用传播,只要虚拟参数也是可选的。

    Fortran 标准对此也有一些 cmets(第 15.5.2.12 章):

    不存在的可选虚拟参数受以下限制。

    ..

    1. 不应作为对应于非可选虚拟参数的实际参数提供 除了作为内在函数 PRESENT 的参数或作为函数的参数 常量表达式的引用。

    ..

    除了上面列表中的说明外,它可以作为对应于可选虚拟对象的实际参数提供 参数,然后也被认为不存在。

    【讨论】:

      猜你喜欢
      • 2017-09-16
      • 2017-08-05
      • 2023-03-03
      • 2016-11-22
      • 2019-06-14
      • 1970-01-01
      • 2014-02-27
      • 2015-01-17
      • 2017-12-18
      相关资源
      最近更新 更多