Конвертировать Фортран в C или C ++ - PullRequest
3 голосов
/ 27 ноября 2008

У меня есть числовой код, который мне нужно преобразовать в C или C ++. Я пытался использовать f2c, но он не работает на коде Фортрана. f2c жалуется, потому что код использует директивы препроцессора стиля C (#include). В файле readme говорится, что это Fortran77, работающий с компоновщиком fort77, который расширит их.

Кто-нибудь знает, как успешно конвертировать этот код?

Мое последнее средство - написать простой препроцессор для расширения этих включений, а затем передать код в f2c.

Примечание: я работаю в среде Windows / Visual C ++, поэтому любые gcc shenanigans, вероятно, доставят больше хлопот, чем они того стоят ...

Ответы [ 4 ]

8 голосов
/ 27 ноября 2008

Я много лет работал в инженерно-исследовательской группе. Нам никогда не удавалось делать автоматические преобразования из Фортрана в С. Код не был особенно понятен, и его было трудно поддерживать. Нашей удачей было использование кода на Фортране в качестве шаблона для алгоритма и повторная реализация всего, что мы ожидали продолжить использовать. В качестве альтернативы, вы можете обновить Fortran, чтобы использовать более современные конструкции Fortran и получить большую часть того же значения, которое вы получите от перехода на C / C ++. Мы также добились некоторого успеха, вызывая подпрограммы Fortran из C, хотя различия в соглашениях о вызовах иногда усложняли ситуацию.

8 голосов
/ 27 ноября 2008

Это , возможно, будет , немного потухает, но вы уже подумали, что, поскольку, возможно, вы используете включения в стиле C, вы можете запустить препроцессор C для файла, включить эти файлы? Затем вы можете взять этот вывод и запустить его через f2c.

(Я не эксперт в этом вопросе. Пожалуйста, уменьшите это, если необходимо.)

7 голосов
/ 27 ноября 2008

Возможно, вам придётся вручную преобразовать

# include "whatsit.f90"

до

ВКЛЮЧИТЬ 'whatsit.f90'

и затем попытка преобразования f2c снова.

4 голосов
/ 27 ноября 2008

У вас нет препроцессора C? В Unix может существовать отдельная программа cpp, которая будет принимать Fortran с директивами #include и преобразовывать его в Fortran без директив #include. В качестве альтернативы, вы можете переименовать источник с xyz.f77 (xyz.f) на xyz.c, затем запустить компилятор C в режиме «только перед обработчиком» и записать вывод как новый ввод в программу f2c. Возможно, вам придется позаботиться о параметрах, которые исключают директивы #line в выводе и т. Д., Или вам может быть лучше запустить вывод через простой фильтр (sed или perl на ум).

...