【发布时间】:2020-06-06 09:42:35
【问题描述】:
在下面的 do 循环中,索引 i 从 1 运行到 n - 1。如果我在循环退出后立即打印 i 的值,那么我可以确认 gfortran 打印了 n 的值(在以下情况下为 10)。这种行为是否始终根据 Fortran 标准得到保证? (即,我们可以期待所有 Fortran 编译器/选项的这种行为吗?)
program main
implicit none
integer :: i, n
n = 10
do i = 1, n - 1
print *, "inside: ", i
enddo
print *, "after exit: ", i !! guaranteed to be n?
end
【问题讨论】:
-
@francescalus 根据链接的答案(和标准文档),我可以理解:如果 m1 = 1,m2 = n,m3 = 1(最简单的设置),“迭代count”从 n 开始(通过 8.1.6.6.1.(3))并随 n、n-1、...、1 变化,而 do-variable 随 1、2、...、n 变化。因为 do-loop 在迭代计数为零时终止(根据 8.1.6.6.2 (1)),所以相应的 do-variable 在循环终止时变为 n+1(通过 8.1.6.6.2.(3)) .
-
正确。迭代计数器需要 n 次递减变为零,此时循环变量也已递增 n 次,变为 n+1。正如该详细答案所指出的那样,循环变量在之前递增,已递减的循环计数器针对值零进行测试。#