微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决对于派生类型,是否有与 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 举报,一经查实,本站将立刻删除。