如何从函数调用中全局化伪参数?
我在Fortran中有以下代码
A(a,b) // here a and b are the values filling from function call but they are not declared any where
.
.
.
B(a.b) // same variable passing again to this function call also.
这里的问题是来自 a 和 b 的值不能维持第二次调用。它正在返回垃圾。即使我尝试使用 common ,但它不接受全局化伪参数。怎么做?
答案 0 :(得分:1)
你说“a
和b
是从函数调用中填充的值,但它们并未在任何地方声明” - 尽管我仍在努力弄清楚你正在尝试什么做,这句话引发了各种各样的危险信号。这是Fortran - 你需要来声明它们(参见注释)。
我不清楚你想要完成什么 - 但是,“全球化”并不是你想做的事情 - 我们应该努力消除代码中的全局变量。
注意:是的,Fortran(或实际上,FORTRAN)支持隐式变量声明。然而,这是打卡和哑终端时代的遗物。 不在任何地方使用隐式输入 - 您的代码总是包含implicit none
,您应该适当地声明变量。
答案 1 :(得分:1)
使用SAVE
声明在子例程或函数的调用之间存储状态。
答案 2 :(得分:0)
虚拟变量本质上是:伪参数。它们只是占位符,当调用函数时,它们会在调用函数时被替换为传递函数的任何函数。让我们看一个愚蠢的例子:
integer function add(x,y)
integer :: x, y
add = x + y
end
现在,您可以通过多种方式调用此函数。假设您要添加a和b:
integer :: a, b, c
a = 3
b = 4
c = add(a,b)
这里,a将取x中函数的位置,b取y的位置。 c的值为7.您可以轻松完成:
integer :: c
c = add(3,4)
具有相同的结果。正如您所看到的,全局化伪参数是没有意义的。