передача строки в качестве аргумента, если манекен имеет указанную длину

если у меня есть этот код

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 подпрограммы? Обязательно ли объявить промежуточную переменную той же длины и передать ее во время вызова?

5
задан Stefano Borini 24 January 2011 в 08:45
поделиться