プログラムに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これが私の条項に適用されないのはなぜですか?