Преобразование Fortran в C или C++

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

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

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

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

Старая шутка состоит в том, что инструмент unix "rm" конвертирует ваши устаревшие программы на Фортране в свободные блоки на диске, которые вы могли бы использовать для их правильной записи.

Paul Tomblin 27.11.2008 06:18

На самом деле это хорошая шутка :-)

David Reis 27.11.2008 06:23

См. Это обсуждение: http://stackoverflow.com/questions/275458/conversion-of-fort‌ ran-77-code-to-c

John D. Cook 11.12.2008 20:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
3
9 509
4

Ответы 4

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

(Я не эксперт в этом вопросе. Если возможно, проголосуйте против.)

Хун ... Мне это тяжело. Но мой компилятор (Visual C++ 9.0) не отделен от препроцессора ... Или есть командная строка, чтобы указать это?

David Reis 27.11.2008 06:38

Вы можете использовать комбинацию параметров / C, / E и / P, подробности см. В msdn.microsoft.com/en-us/library/becb7sys(VS.71).aspx.

Robert Gamble 27.11.2008 07:32

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

Агин, как использовать этот режим только препроцессора в Visual C++ 9.0?

David Reis 27.11.2008 06:40

Вы можете обойтись без ручного преобразования

#include "whatsit.f90"

к

INCLUDE 'whatsit.f90'

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

Даже если это код Fortran 77 (поэтому расширение может быть .f77 вместо .f90). Конечно, стоит попробовать.

Jonathan Leffler 27.11.2008 07:45

Кроме того, лучше, конечно, сделать преобразование автоматически. Несложный сценарий - вероятно, однострочный Perl.

Jonathan Leffler 27.11.2008 07:49

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

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

dmckee --- ex-moderator kitten 27.11.2008 23:32

Другие вопросы по теме