Фортран: как передать имя функции в общий блок - PullRequest
0 голосов
/ 22 мая 2011

В Фортране можно поместить функцию в общий блок, как в: ОБЩИЙ / myblock / func (где x - некоторая переменная, а func - функция).

Моя проблема в том, что я хотел бы создать функцию s (x), которая вызывает внешнюю функцию func (x), но без передачи func в s (x). Для моего проекта s (x) должна быть функцией только одной переменной, то есть я не хочу делать: функция s (x, func) S = FUNC (х)

Вместо этого я надеюсь, что смогу сделать: функция s (x) общий / myblock / func S = FUNC (х)

Или, если у кого-то есть другие предложения по использованию модулей или чего-то еще, это будет здорово.

Заранее спасибо за любую помощь.

о.

и затем имеют тот же общий (myblock) в подпрограмме, который вызывает s (x).

Ответы [ 4 ]

2 голосов
/ 23 мая 2011

Современный способ сделать это с помощью указателя на функцию. Указатель может быть передан в качестве аргумента или, для разработки этого вопроса, помещен в модуль. См., Например, Массивы указателей на функции в Fortran

2 голосов
/ 22 мая 2011

Я не верю, что это возможно любым портативным способом.Некоторые реализации могут позволить вам использовать некоторые приемы для этого.

1 голос
/ 22 мая 2011

Современные стандарты Fortran запрещают это. От 5.5.2 Фортрана 2003:

Объект общего блока не должен быть ... именем функции, именем записи ...

И, во всяком случае, использование глобальных переменных для передачи непостоянных данных - просто ужасная, ужасная идея. Как указывает ja72, вы можете сделать это с помощью модулей, но я отказываюсь демонстрировать это с помощью примера кода.

1 голос
/ 22 мая 2011

Я думаю, что вы не должны использовать общие блоки для этого, но модули.Поместите вашу функцию func в модуль с именем myfunctions, а затем при необходимости вставьте в оператор use myfunctions и все.

...