我定制了一个商业代码,它深入使用公共块来定义全局变量。
我想要做的是只将其中一个变量传递给子程序,而不是传递包含,因为我不需要将其他几个变量定义为常见变量。
我发现这样做的唯一方法是先前定义一个新的局部变量,为其赋值全局变量的值,然后将新变量传递给子例程,但我不喜欢这样继续进行..
是否有解决方案告诉Fortran在将变量传递给子程序时将变量转换为local?
这里有一个例子:
主程序:
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
答案 0 :(得分: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
。
您能提供显示问题的示例代码吗?