如果我有这个代码
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")
-----------^
在不修改子例程 dummy len 规范的情况下,我怎样才能使这个东西工作?是否必须声明一个具有相同长度的中间变量并在调用时传递它?