1

我正在定制一个商业代码,它深度使用公共块来定义全局变量。

我想做的是只将其中一个变量传递给子例程,但不包含,因为我不需要其他几个定义为通用的变量。

我发现这样做的唯一方法是先前定义一个新的局部变量,为其分配全局变量的值,然后将新变量传递给子例程,但我不喜欢这种继续方式。

是否有解决方案告诉 Fortran 在将变量传递给子例程时将其转换为本地变量?

这里有一个例子:

主程序:

INTEGER :: A
REAL :: Y(20)
COMMON /VARS/ Y, A
INTEGER :: res, transfer_var
transfer_var = A
call sub_test(transfer_var, res)
...

子程序:

subroutine sub_test(var1, var2)
INTEGER, intent(in) :: var1
INTEGER, intent(out) :: var2
var2 = 1 + var1
return
end
4

1 回答 1

0

这是代码的最小工作示例,它没有表现出您描述的行为。 A在 main 中赋值,通过 common 传递给 sub_one,然后直接用作子程序参数。

 implicit none
 INTEGER :: A,res
 COMMON /VARS/ A
 A=41
 call sub_one()
 end 

 subroutine sub_one()
 INTEGER :: A,res
 COMMON /VARS/ A
 call sub_test(a,res)
 write(*,*)res
 end

 subroutine sub_test(var1, var2)
 INTEGER, intent(in) :: var1
 INTEGER, intent(out) :: var2
 var2 = 1 + var1
 return
 end

这编译没有问题并返回结果42

您能否提供显示问题的示例代码?

于 2014-11-14T21:11:05.683 回答