Как глобализировать фиктивный аргумент из вызова функции - PullRequest
0 голосов
/ 22 июля 2009

Как глобализировать фиктивный аргумент из вызова функции?

У меня есть код ниже на Фортране

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 ]

1 голос
/ 16 июня 2015

Используйте объявление SAVE для сохранения состояния между вызовами подпрограммы или функции.

1 голос
/ 22 июля 2009

Вы говорите, что "a и b - это значения, заполняемые при вызове функции, но они нигде не объявлены" - хотя я все еще пытаюсь выяснить, что именно вы пытаетесь сделать, это утверждение подбрасывает всевозможные красные флаги. Это Фортран - вам нужно , чтобы объявить их (см. Примечание).

Мне неясно, чего вы пытаетесь достичь - хотя, скорее всего, «глобализация» - это не то, что вы хотите - мы должны стремиться исключить глобальные переменные в нашем коде.

Примечание. Да, Fortran (или, действительно, FORTRAN) поддерживает неявное объявление переменных. Однако это пережиток времен перфокарт и тупых терминалов. Не везде используйте неявную типизацию - ваш код должен всегда включать implicit none, и вы должны соответствующим образом объявить свои переменные.

0 голосов
/ 22 декабря 2012

Пустые переменные по своей природе, это: фиктивные аргументы. Они просто заполнители, и когда вызывается функция, они заменяются тем, что вы передали при вызове функции. давайте посмотрим на глупый пример:

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)

с такими же результатами. как видите, глобализация фиктивных аргументов не имеет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...