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

У меня есть коллекция файлов .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», но тогда ошибка была связана с поиском атрибута перед *. Нужно ли мне что-то в последнем столбце со значениями HEAD #, чтобы прокомментировать это, нужно ли мне создавать файлы .H с помощью компилятора C++ или что?


person Bob    schedule 03.05.2011    source источник
comment
это заголовочные файлы, вы их не компилируете   -  person Anycorn    schedule 03.05.2011


Ответы (1)


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

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

person Jonathan Dursi    schedule 03.05.2011
comment
Вы должны просмотреть файлы, включая заголовки, чтобы увидеть, как они включаются. Чтобы gfortran запускал препроцессор C, используйте параметр компиляции -cpp. - person M. S. B.; 03.05.2011
comment
Вам также может понадобиться параметр компилятора -ffixed-line-length-72, чтобы заставить gfortran игнорировать неисходный код в столбцах с 73 по 80. HEAD 1 и т. д. - person M. S. B.; 03.05.2011
comment
Спасибо, я не совсем понял, как они работают. Я привык размещать свои глобальные переменные в модулях, но этот код был написан до 95-го года. На самом деле они используются в коде с оператором include 'HEAD.h'. Я избавлюсь от оператора компиляции для файлов *.h в моем make-файле. - person Bob; 03.05.2011