对于派生类型,是否有与 Fortran 中的 pragma pack(1) 等效的东西?

问题描述

我正在封装一个返回结构数组的 C 函数

我将 Fortran 中的等效派生类型定义为:

    type,bind(c)   :: myrecord
            integer(c_int)          :: a
            integer(c_int)          :: b
            real(c_double)          :: c
            real(c_double)          :: d
            real(c_double)          :: e
            real(c_double)          :: f
            integer(c_int)          :: g
            integer(c_int)          :: h
            integer(c_int)          :: i
    end type

当我检查它的大小时,我得到 448(56 个字节):

type(my_record) :: x_myrecord
print *,storage_size(x_myrecord)

448

然而,在 C 中,由于 pragma pack(1) 的使用,它的大小仅为 52 字节。

这是一个问题,因为我正在接收一个结构数组,虽然正确接收了数组的第一项,但后续的却没有,因为字段的值错位了(+4 字节的增量偏移用于每个后续记录)。

有什么方法可以强制 Fortran 像在 C 编译器 (gcc/clang) 中那样使用打包结构?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)