Open certik opened 1 week ago
Just to be clear, the above is equivalent to the below?
condition = .false.
do i = 1, 10
...
if (condition) exit
end do
if (i > 10) then
! This block only executes if the do loop doesn't exit.
error stop "Condition not met"
end if
Yes. I updated the above description with an example. (I don't like using loop variables after the loop, but that's a separate issue: is it even specified by the standard?)
is it even specified by the standard?
Yes, although it's not immediately obvious. From 11.1.7.4.3 The execution cycle
The DO variable, if any, is incremented by the value of the incrementation parameter m3
and from 11.1.7.4.5 Loop termination
When a DO construct becomes inactive, the DO variable, if any, of the DO construct retains its last defined value.
So if a do loop completes all its iteration, the standard says it has a value > the ending value.
@everythingfunctional thanks for the clarification!
Looks like syntactic vinegar for the existing and less mysterious
search: block
do j = 1, 10
...
if (condition) exit search
end do
error stop 'nope'
end block
https://fortran-lang.discourse.group/t/for-else-or-do-else-in-fortran/8696
Example:
which would be equivalent to:
Similar to Python's "for else": https://docs.python.org/3/tutorial/controlflow.html#else-clauses-on-loops