如何解决对于派生类型,是否有与 Fortran 中的 pragma pack(1) 等效的东西?
我将 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 举报,一经查实,本站将立刻删除。