gpt4 book ai didi

c - 在 fortran 子例程中包含一个 c/c++ 头文件

转载 作者:行者123 更新时间:2023-12-02 07:37:43 34 4
gpt4 key购买 nike

我有一个用 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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com