如果我有这个代码
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规范的情况下使这个东西工作?是否必须使用相同的长度声明一个中间变量并在调用时传递它?