Почему вообще выполняется второе условие if?

у меня естьdo while цикл в моей программе, ктоУсловие продолжения продолжает выдавать мне ошибки, и я могуне понимаю, почему. Это выглядит так:

do while (ii .le. nri .and. ed(ii) .le. e1)
    ! do some stuff...
    ii = ii + 1
end do

гдеii а такжеnri скалярные целые числа,e1 скалярное реальное, иed это реальный массив длиныnri, Я ожидаю, что после последнего запуска произойдетii.le.nri возвращается.false. второе условие никогда не проверяется, и я неНикаких неприятных проблем. Я'проверил с помощью отладчика, чтоii.le.nri действительноделает вернуть.false. - и все же программа вылетает.

Чтобы проверить мое предположение, что проверяется только одно условие, я даже написал небольшую тестовую программу, которую я скомпилировал с теми же параметрами компилятора:

 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

и выходит. Второй тест никогда не запускается.

Почему нетэто относится к моемуdo while статья?

Ответы на вопрос(2)

Ваш ответ на вопрос