Как мне скомпилировать этот устаревший код FORTRAN 77 с файлами *.h?

#fortran #header-files #fortran-common-block

#fortran #заголовочные файлы #fortran-common-block

Вопрос:

У меня есть коллекция файлов .F и .Файлы H, составляющие код FORTRAN. У меня возникли проблемы с компиляцией .Файлы H. Файлы .H содержат множество общих блоков. Пример одного из .Файлы H — это:

 *AC HEAD      
c                                                                       HEAD 1
      common/blah/ x(25), y, z(25), p(25,mnv),                          HEAD 2
     1                t(25,mx), d(25,mnv)                               HEAD 3
c                                                                       HEAD 4
ETC...
  

Когда я ищу ответ в Google, говорится, что файлы .h — это файлы c / c , но они не выглядят так, как будто они написаны на c / c . gfortran, похоже, также думает, что это файлы C.

Когда я пытаюсь скомпилировать:

gfortran-4.5 -fdefault-real-8 -fbacktrace -fno-align-commons HEAD.h

Я получаю ошибки:

 cc1: warning: command line option "-fdefault-real-8" is valid for Fortran but not for C
cc1: warning: command line option "-fbacktrace" is valid for Fortran but not for C
cc1: warning: command line option "-fno-align-commons" is valid for Fortran but not for C
HEAD.h:1:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘HEAD’
  

Я попытался закомментировать первую строку ‘*AC HEAD’, но затем ошибка заключалась в поиске атрибута перед * . Нужно ли мне что-то в последнем столбце с заголовком # values, чтобы прокомментировать это, нужно ли мне создать .Файлы H с помощью компилятора C или чего-то еще?

Комментарии:

1. это заголовочные файлы, вы их не компилируете

Ответ №1:

Вы их не компилируете. Если вы выполните grep-обработку других файлов fortran, вы увидите, что они включены с использованием чего-то вроде include HEAD.h или ‘#include «head.h»‘ (это второе — мое предположение; я предполагаю, что вы запускаете препроцессор C для файлов fortran). Эти инструкции include в основном считываются в копии этого файла .h, где бы ни находилась инструкция include в процессе компиляции. Итак, это фрагмент кода, который используется, но никогда не компилируется сам по себе.

Такое включение заголовочных файлов в Fortran больше не является лучшей практикой, тем более что они используются для широкого распространения общих блоков по коду. Поэтому не пишите никакого нового кода, используя этот подход. Но именно это делает этот конкретный старый код.

Комментарии:

1. Вы должны просмотреть файлы, включая заголовки, чтобы увидеть, как они включаются. Чтобы gfortran запустил препроцессор C, используйте опцию компиляции -cpp.

2. Вам также может понадобиться опция компилятора -ffixed-line-length-72, чтобы заставить gfortran игнорировать исходный код в столбцах с 73 по 80. «ГЛАВА 1» и т.д.

3. Спасибо, я не совсем понял, как они работают. Я привык помещать свои глобальные переменные в модули, но этот код был написан до 95. На самом деле они используются в коде с инструкцией «include ‘HEAD.h'». Я избавлюсь от инструкции compile для файлов *.h в моем makefile.