【发布时间】:2016-12-20 16:43:03
【问题描述】:
我正在尝试从 C 调用一些 Fortran 代码,但我没有找到传递 C 字符数组的正确方法。
SUBROUTINE My_F_Code (c_message) BIND(C, NAME='my_f_code')
USE ISO_C_BINDING
IMPLICIT NONE
CHARACTER*(C_CHAR) c_message
CHARACTER*(256) f_message
CALL C_F_POINTER( C_LOC(c_message), f_message)
WRITE(*,*) f_message,LEN(f_message)
END
BIND(C) 强制参数 c_message 的大小为 1。如何访问 c_message 字符串的其他元素?
编译器:GCC 4.8.2
【问题讨论】:
-
我很困惑。 Fortran 77(和 Fortran 90)没有 F2K C 互操作功能。你的代码 Fortran 77 是怎样的?
-
我也很困惑。 Gfortran 将代码编译为 Fortran 2008,
bind(C)接口为 Fortran 2003。 -
你必须显示你正在连接的子程序和你得到的错误信息。这很重要。
-
例如,
CHARACTER*(C_CHAR)在语法上不正确。您应该只使用CHARACTER(kind=C_CHAR)而不要关心您的代码是 F77 还是 F 其他。大多数 Fortran 77 代码都是有效的 Fortran 2008 代码。 -
没错,gfortran 使用的是 f2008 标准,并且没有 ISO_C_BINDING 和 f95 标准
标签: c arrays fortran fortran-iso-c-binding