Можем ли мы избежать создания локальной переменной, если необязательный аргумент не PRESENT?
У меня проблема с PRESENT
заявление с Fortran 95. В настоящее время я использую Платона Silverfrost и их компилятор FTN95 (в режиме "Release Win32"). Что я хотел сделать, это создать подпрограмму SUB(a,b)
, где b
является необязательной переменной Пока все хорошо, но проблема возникает, когда я пытаюсь дать новое значение b
с if (.NOT. present(b)) b=0
, Это код:
module MOD
contains
subroutine SUB(a,b)
implicit none
integer :: a
integer,optional :: b
if (.NOT. present(b)) b=0
print*, a,b
end subroutine SUB
end module MOD
program TEST
use MOD
implicit none
integer :: i=2, j=1
call SUB(i,j)
call SUB(i)
call SUB(j)
end program TEST
Есть ли элегантный выход из этой ситуации, или мне действительно нужно создать другую переменную, b_aux
например, а затем использовать следующий код?:
if (present(b)) then
b_aux=b
else
b_aux=0
endif
1 ответ
Решение
Вы не можете использовать несуществующую переменную, поэтому необходим такой подход, как вспомогательная локальная переменная.