если у меня есть этот код
module test
contains
subroutine xx(name)
character(len=20), intent(in), optional :: name
if (present(name)) then
print *, name
else
print *, "foo"
endif
end subroutine
end module
program x
use test
call xx()
call xx("foo2")
end program
Он не будет компилироваться, поскольку длина "foo2" не равна 20, и компилятор жалуется
test.f90(17): error #7938: Character length argument mismatch. ['foo2']
call xx("foo2")
-----------^
Как я могу заставить эту вещь работать, не изменяя спецификацию фиктивного len подпрограммы? Обязательно ли объявить промежуточную переменную той же длины и передать ее во время вызова?