gpt4 book ai didi

fortran - 将字符串内联传递给子例程调用(其中参数已定义长度)会产生意外结果

转载 作者:行者123 更新时间:2023-12-02 04:07:31 24 4
gpt4 key购买 nike

我发现这段代码的行为异常

module testmodule
integer, parameter :: LCHARS = 50
contains
subroutine init()
call foobar("foobar")
end subroutine

subroutine foobar(s)
character(len=*), intent(in) :: s
call bar(s)
end subroutine

subroutine bar(str)
character(len=LCHARS), intent(in) :: str

print *, str
end subroutine
end module

program foo
use testmodule
call init()
end program

此代码打印与编译器相关的垃圾。

我发现问题在于,我正在使用 len=* 作为字符串参数跳过例程,然后将其传递给具有指定字符串参数长度的例程。

幕后到底发生了什么,标准中的哪里描述了这种行为?我是否应该避免为字符例程参数指定长度,因为这种行为可能在没有警告的情况下随时发生?

最佳答案

我认为您的代码不合格。 Fortran 95 标准的 12.4.1.1 节指出:

12.4.1.1 Actual arguments associated with dummy data objects
[...]
If a scalar dummy argument is of type default character, the length len of the dummy argument shall be less than or equal to the length of the actual argument. The dummy argument becomes associated with the leftmost len characters of the actual argument.

关于fortran - 将字符串内联传递给子例程调用(其中参数已定义长度)会产生意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8894704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com