作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用 C/C++ 编写的库,它的开发人员声明它具有 Fortran 接口(interface)。该接口(interface)将被启用,包括一个头文件 *.h 并调用一个经典的子程序。我想编译我的 Fortran 程序也链接那个库。该库已经过测试并且可以正常工作。
这是主程序:
! Main program
INCLUDE 'pastix_fortran.h'
Program TEST
IMPLICIT NONE
call GO_PASTIX
END PROGRAM TEST
例程GO_PASTIX是
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
而在文件 pastix_fortran.h 中定义了子程序中使用的变量类型:
#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
使用 VS2010,我添加了使用/fpp 预处理文件的选项,并且我没有忘记添加所有包含目录和文件。但是编译器说:
对于标题行:“Warning 1 warning #5117: Bad # preprocessor line”
对于 fortran 子例程:“错误 #6404:此名称没有类型,必须具有显式类型。[PASTIX_DATA_PTR_T]”,其余变量依此类推...
我该如何解决这个问题?
最佳答案
显然,类型的 #define
没有被正确处理。我认为,可能的问题之一是您在 Fortran 中包含头文件的方式,因为您是通过 Fortran 语句 而不是 预处理器指令 来实现的。所以,可能它只包含在文件已经被预处理之后。因此,预处理器不会解析 .h 文件中的 #define
选项。
将 include()
语句更改为 #include
预处理器指令可能会解决问题。
关于c - 在 fortran 子例程中包含一个 c/c++ 头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14629307/
我是一名优秀的程序员,十分优秀!