Я не понимаю поведения встроенной функции present () с pgf90 7.2. Я написал пример программы из 20 строк, чтобы проверить это, но результаты все еще не имеют для меня смысла. Наблюдать:
subroutine testopt(one,two,three,four,five)
implicit none
integer, intent(in) :: one,two
integer, intent(out) :: three
integer, intent(in), optional :: four
integer, intent(out), optional :: five
three = one + two
print *,"present check: ",present(four),present(five)
if (present(four) .and. present(five)) then
five = four*four
end if
end subroutine testopt
если я: вызову testopt (1,2, (любая переменная)) из моей основной программы, он напечатает: «Present check: T F». Однако если я: вызову testopt (1,2, (любая переменная)) из подпрограммы, он напечатает: «Present check: T T». Я ожидал увидеть «текущую проверку: F F» в любом случае, потому что я вызываю подпрограмму только с 3 необязательными аргументами и ни с одним из необязательных. Я не могу понять, почему он так себя ведет, и это вызывает серьезную ошибку в программе, над которой я работаю. Я ценю любую проницательность. Спасибо.