将 saved/static 目标变量公开到外部范围

Expose saved/static target variable to scope outside

以下代码中的本地 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)),因此指针保持定义状态。