gpt4 book ai didi

c++ - Fortran 中 REAL(KIND=real_normal) 的 C 等效类型是什么?

转载 作者:行者123 更新时间:2023-11-30 17:04:34 27 4
gpt4 key购买 nike

将数组从 Fortran 传递到 C 函数时遇到问题:在 fortran 中,数组定义为

REAL(KIND=real_normal) , DIMENSION(:), ALLOCATABLE :: array
call cFunc(array)

如果将cFunc定义为

void cFunc(double *data){...}

数据只包含“垃圾”值。这个案例的问题出在哪里呢? (使用整数可以很好地解决这个问题)。

谢谢。编辑:我的平台:编译器:VS 2008,Intel编译器11版本操作系统:Win7

编辑2:我这样定义 c 函数的接口(interface)(代码被简化为一个元素,这会产生问题,真正的函数有更多参数):

interface c_interface

subroutine cFunc(array) bind (C, name = "cFunc")
use iso_c_binding
REAL(c_double), DIMENSION(*)::array
end subroutine cFunc

fortran中的内存是用

分配的
ALLOCATE (array(numberOfElements))
call cFunc(array)

目前我收到运行时错误“浮点溢出”。在某些情况下,数组的元素是正确的。

最佳答案

片段REAL(KIND=real_normal)不是数据类型的完整和标准规范。在您拥有的源代码中,必须有变量real_normal的声明。我猜测它的声明是 array 是 4 或 8 字节 float ,但这只是一个猜测。 array 并不是一个默认 float 数组(Fortran 称为 real)。

正如其他回答者之一所建议的那样,研究 Fortran 2003 的与 C 功能的互操作性。如果您的编译器没有实现这些功能,请放弃它并获取可以实现这些功能的编译器。

关于c++ - Fortran 中 REAL(KIND=real_normal) 的 C 等效类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35699118/

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