Pregunta

Tengo una colección de archivos .f y .h que componen un código FORTRAN. Me estoy encontrando con problemas para compilar los archivos .h. Los archivos .h contienen un montón de bloques comunes. Un ejemplo de uno de los archivos .h es:

*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...

Cuando busco una respuesta en Google, se dice que los archivos .H son archivos C/C ++, pero no parecen que estén escritos en C/C ++. Gfortran también parece pensar que son archivos C.

Cuando intento compilar:

GFORTRAN-4.5 -FDEFAULT-REAL-8 -FBACKTRACE -FNO-ALign-Commons Head.H

Entiendo los errores:

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’

Traté de comentar la primera línea ' *AC Head', pero luego el error fue para buscar un atributo antes del *. ¿Necesito algo en la última columna con los valores de la cabeza para el comentario? ¿Necesito construir los archivos .h con un compilador C ++ o qué?

¿Fue útil?

Solución

No lo compilas. Si greos los otros archivos de Fortran, verá que se incluyen usando algo como include HEAD.h o '#include "head.h" (ese segundo es mi suposición; supongo que estás ejecutando el preprocesador C en los archivos Fortran). Esas incluyen declaraciones que se leen básicamente en una copia de ese archivo .h donde sea que la declaración de inclusión sea durante el proceso de compilación. Por lo tanto, es un código que se usa, pero que nunca se compila por sí solo.

Esta inclusión de archivos de encabezado en Fortran es no Las mejores prácticas más tiempo, y aún más porque se usan para distribuir ampliamente bloques comunes a través del código. Así que no escriba ningún código nuevo utilizando este enfoque. Pero eso es lo que está haciendo este antiguo código en particular.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top