将 saved/static 目标变量公开到外部范围
Expose saved/static target variable to scope outside
以下代码中的本地 save
d 变量暴露给外部范围是否是有效的 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)),因此指针保持定义状态。
以下代码中的本地 save
d 变量暴露给外部范围是否是有效的 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)),因此指针保持定义状态。