fortran - 将保存的/静态目标变量公开到外部范围

标签 fortran language-lawyer

以下代码中的本地 saved 变量暴露给外部范围是否是有效的 Fortran(>=2003) 代码?

我故意没有为标准指定年份。如果不同标准的答案不同,假设支持指针,我也很乐意听到答案。

program test_save
    implicit none

    integer, pointer :: ptr

    ptr => get_number(5)

    write(*, *) ptr

contains

    function get_number(n) result(res)
        integer, intent(in) :: n
        integer, pointer :: res
        integer, target, save :: internal_n
        internal_n = n
        res => internal_n
    end function
end program

最佳答案

要考虑的一点是,当函数退出时,res 的目标是否仍然定义(F2018 19.6.6p1(16))。由于目标具有 SAVE 属性,它确实保持定义状态 (F2018 19.6.6p1(3)),因此指针保持定义状态。

关于fortran - 将保存的/静态目标变量公开到外部范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69065251/

相关文章:

c++ - 在//C++ 注释中使用\\是否合法? (C++ 注释中的 LaTeX 方程)

c++ - 在修改后的异常上使用 `throw;`

fortran - Fortran 是多调度编程语言吗?

fortran - 从 Intel Fortran 调用 COM?

Fortran 打印语句格式,空格太多

c++ - C++ 标准是否要求 C 链接函数为 `noexcept` ?

java - 为什么类不能扩展其中出现的静态嵌套类?

c++ - C++ 标准在哪里允许指向未定义类型的指针?

linux - 命名管道和 Fortran 的问题

arrays - 使用数组从文件读取问题