Очевидно, что FORTRAN 77 не поддерживает динамическое выделение памяти.
Вы можете попытаться выделить память в программе c и передать результат обратно в процедуру FORTRAN.
Или, если быть более точным, использование какого-либо Interop для вызова метода c
из Фортрана.
Портативный Unix-компилятор Fortran-77 ('f77') написан почти
полностью в C. Второй проход компилятора тот же, который используется
компилятор C и большинство библиотечных подпрограмм 'f77' являются просто интерфейсами
в соответствующие подпрограммы библиотеки C Тем не менее, так как Фортран не
поддерживать структуры данных, подобные тем, которые используются в C, вы не сможете
воспользоваться всеми функциями библиотеки «curses»
предложения. Управлять окнами с помощью «проклятий» особенно сложно. Если
вы заинтересованы в использовании подпрограмм с участием структур данных, вы
вероятно, следует использовать C вместо Fortran.
Чтобы вызывать подпрограммы C из программы на Фортране, вам придется написать несколько
С кодом. Фортран передает аргументы по ссылке или адресу, поэтому C
Функция должна быть готова принять переменную в качестве адреса. это
означает, что вам придется писать функции в C, которые вызываются из
Фортран, который правильно настроил аргументы перед вызовом библиотеки
функция. Схематически это может быть что-то вроде:
Обратите внимание на подчеркивание (_) в названии процедуры.
В исходном файле C:
foo_ (bar) / * Примечание подчеркивание * / int bar; / Примечание переменные
прошло по адресу * /
{:}
В исходном файле на Фортране:
call foo (baz) / * Предполагается, что "baz" является целым числом. * / {:}
Подчеркивание важно, потому что Фортран использует символ, чтобы сохранить
его символы прямые. Если вы компилируете на RS6000, это не
поведение по умолчанию, но компилируется с опцией -qextname на
RS6000 заставит его работать идентично другим платформам.
Вызов C из Фортрана
Обратите внимание на пример на Фортране и то, как он вызывает подпрограммы C:
вызовите initscr () вызовите clear (). , , позвонить двигаться (х, у). , , вызов
функция refresh () вызывается endwin () end
... где x и y - целые числа, определяющие новые координаты.
Вызов проклятий из Фортрана
Если вы вызывали рутину 'curses' move () ', вы можете сделать
как то так:
Исходный файл C содержит подпрограмму интерфейса для curses
библиотечная функция 'move ()' вместе с другими функциями C, которые
предоставить интерфейс для некоторых других функций curses:
# включает
initscr_ () {initscr (); }
clear_ () {clear (); }
move_ (x, y) int * x, y; / Это указатели * / {move (* x,
* У); }
refresh_ () {refresh (); }
endwin_ () {endwin (); }
Подпрограммы компилируются с помощью этих команд:
cc -c curses.c f77 test.f curses.o -lcurses -ltermcap
Если вы используете макросы, определенные в /usr/include/curses.h в вашем
Фортран файл, имейте в виду, что они принимают соглашения С
язык. Имейте в виду, что это может повлиять на результаты, которые вы получаете, когда
используя их в Фортране.