问题描述
我将 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 (将#修改为@)