gpt4 book ai didi

parameters - 在 Fortran-90 中将参数作为参数传递?

转载 作者:行者123 更新时间:2023-12-01 09:21:13 25 4
gpt4 key购买 nike

假设我有一个子程序:

subroutine foo(x, Nx)
implicit none
integer, intent(IN) :: x
integer, intent(IN) :: Nx

select case(x)
case (1)
write(*,*) "Minimum value"
case (Nx)
write(*,*) "Maximum value"
case default
write(*,*) "Somewhere in-between"
end select
end subroutine foo

假设我的驱动程序如下所示:

program main
implicit none

interface
subroutine foo(x,Nx)
integer, intent(IN) :: x
integer, intent(IN) :: Nx
end subroutine foo
end interface

integer, parameter :: Nx = 100
integer :: x

call foo(20, Nx)

end program main

上面的程序不会编译,因为在子程序中,case (Nx)是无效的。具体来说,ifort 16 给出以下错误:

error #6601: In a CASE statement, the case-value must be a constant expression.

换句话说,即使 Nx 实际上通过 intent(IN) 声明为子例程常量,它也必须是字面常量或 参数integer 类型的

有什么方法可以让 case 语句接受 Nx 作为我们知道的常量参数吗?有没有办法将 Nx 声明为传入的 parameter

我意识到在这个简单、简短的示例中,if-then-elseif-else-end block 就足够了,但是我不知道这个问题的答案。 :-)

最佳答案

只需使用 if 语句。子例程参数(称为参数)当然不是参数(命名常量)。 intent(in) 并没有使其有效地 成为参数,它只是一个您不会更改它的 promise ,但有一些方法可以规避它。 case 语句需要一个编译时常量。

关于parameters - 在 Fortran-90 中将参数作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553490/

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