プログラムにdo while
ループがあり、続行する条件が 1 つずつずれてエラーが発生し続け、その理由がわかりません。次のようになります。
do while (ii .le. nri .and. ed(ii) .le. e1)
! do some stuff...
ii = ii + 1
end do
ここでii
、 とnri
はスカラー整数、e1
はスカラー実数、ed
は長さの実数配列ですnri
。最後の実行後に起こると予想されるのは、2 番目の条件がii.le.nri
返されてからテストされず、オフバイワンの問題が発生しないことです。実際に戻る.false.
デバッガーで確認しましたが、プログラムはクラッシュします。ii.le.nri
.false.
1 つの条件のみがテストされるという私の仮定を検証するために、同じコンパイラ オプションでコンパイルした小さなテスト プログラムを作成しました。
program iftest
implicit none
if (returns_false() .and. returns_true()) then
print *, "in if block"
end if
contains
function returns_true()
implicit none
logical returns_true
print *, "in returns true"
returns_true = .true.
end function
function returns_false()
implicit none
logical returns_false
print *, "in returns false"
returns_false = .false
end function
end program
このプログラムを実行すると、予想どおり、
$ ./iftest
in returns false
そして終了します。2 番目のテストは実行されません。
do while
これが私の条項に適用されないのはなぜですか?