【问题标题】:Value of index variable after loop exit in Fortran [duplicate]Fortran中循环退出后索引变量的值[重复]
【发布时间】:2020-06-06 09:42:35
【问题描述】:

在下面的 do 循环中,索引 i1 运行到 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。正如该详细答案所指出的那样,循环变量在之前递增,已递减的循环计数器针对值零进行测试。#

标签: loops indexing fortran


【解决方案1】:

是的,迭代变量在每次迭代结束时递增,包括最后一次迭代,因此您可以保证在您提供的示例中循环完成后,i 的值将是 n

【讨论】:

  • 谢谢!我最近发现了一些使用这个功能的代码,担心这可能不便携。
猜你喜欢
  • 2013-08-11
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多