programa lenguaje incluir headers encabezados ejemplos crear cabeceras cabecera archivos c header include fortran

lenguaje - incluido el archivo de encabezado ac/c++ en las subrutinas de Fortran



headers en c (2)

Aparentemente, el #define para el tipo no se procesa correctamente. Creo que uno de los posibles problemas es la forma en que incluye el archivo de encabezado en Fortran, ya que lo está haciendo a través de una declaración Fortran en lugar de una directiva de preprocesador . Entonces, probablemente solo esté incluido, después de que el archivo ya haya sido preprocesado. Por lo tanto, las opciones #define en el archivo .h no son resueltas por el preprocesador.

Cambiar la instrucción include() en una directiva del preprocesador #include puede resolver el problema.

Tengo una biblioteca escrita en C / C ++ que, según declaran sus desarrolladores, tiene una interfaz Fortran. La interfaz se habilitaría incluyendo un archivo de cabecera * .h y llamando a una subrutina clásica. Me gustaría compilar mi programa Fortran vinculando también esa biblioteca. La biblioteca ya ha sido probada y funciona.

Aquí está el programa principal:

! Main program INCLUDE ''pastix_fortran.h'' Program TEST IMPLICIT NONE call GO_PASTIX END PROGRAM TEST

La rutina GO_PASTIX es

SUBROUTINE GO_PASTIX IMPLICIT NONE pastix_data_ptr_t :: pastix_data integer :: pastix_comm pastix_int_t :: n, rhs, ia(NCOLS+1), ja(NNZER) pastix_float_t :: avals(NNZER), b(NROWS) pastix_int_t :: perm(NROWS), invp(NROWS), iparm(64) real*8 :: dparm(64) call pastix_fortran(pastix_data,pastix_comm,n,ia,ja,avals,perm,invp,b,rhs,iparm,dparm) END SUBROUTINE

Mientras que en el archivo pastix_fortran.h se definen los tipos de variables utilizados en la subrutina:

#define PASTIX_INT_KIND 4 #define pastix_int_t INTEGER(kind=4) #define pastix_uint_t unsigned INTEGER(kind=4) #define pastix_data_ptr_t INTEGER(kind=4) #define MPI_PASTIX_INT MPI_INTEGER4 #define pastix_float_t REAL(kind=8) #define MPI_PASTIX_FLOAT MPI_REAL8

Utilizando VS2010 agregué la opción de preprocesar el archivo con / fpp y no olvidé agregar todos los directorios y archivos incluidos. Sin embargo, el compilador dice que:

para las líneas de encabezado: "Warning 1 warning # 5117: Bad # preprocessor line"

para la subrutina fortran: "error # 6404: este nombre no tiene un tipo, y debe tener un tipo explícito. [PASTIX_DATA_PTR_T]" y así sucesivamente para el resto de las variables ...

¿Cómo puedo resolver esto?


Esta línea

#define pastix_uint_t unsigned INTEGER(kind=4)

va a causar la mayoría de los compiladores de Fortran un pequeño problema ya que el lenguaje nunca ha soportado enteros sin signo que usen esta u otra sintaxis. Algunas implementaciones desviadas pueden haberlo soportado, pero definitivamente no son estándar.