如何从函数调用中全局化伪参数

时间:2009-07-22 06:41:34

标签: fortran

如何从函数调用中全局化伪参数?

我在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 ,但它不接受全局化伪参数。怎么做?

3 个答案:

答案 0 :(得分:1)

你说“ab是从函数调用中填充的值,但它们并未在任何地方声明” - 尽管我仍在努力弄清楚你正在尝试什么做,这句话引发了各种各样的危险信号。这是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)

具有相同的结果。正如您所看到的,全局化伪参数是没有意义的。