如果我有这个代码
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")
-----------^
我怎样才能让这个东西工作,而不修改子例程虚拟长度规范?是否必须声明具有相同长度的中间变量并在调用时传递该变量?
标准语言可能很难理解。我读到@kemiisto 引用的条款要求长度(dummy arg) <= length
(实际参数)。这里的长度(dummy arg) = 20
and length (actual arg) = 4
,所以长度(dummy arg) > length (actual arg)
,这是该条款不允许的。该子句讨论了如果需要的话,截断实际值以匹配虚拟值,而不是用空格填充。
如果您替换该代码将起作用character(len = 20)
with character(len = *)
因为您不想修改虚拟参数规范的长度,所以这有问题吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)