愤怒的三炮 发表于 2024-10-20 02:40:40

Fortran与C的内存对齐

本帖最后由 愤怒的三炮 于 2024-10-20 02:41 编辑

我有一个派生数据类型,需要在C和Fortran中共同使用。

在C这头,我定义为
struct MyType
{
      char str;
      inti;

};
在Fortran这头,我的定义为
      type,bind(c):: MyType
                character(c_char):: str(3)
                integer(c_int):: i
      end type
正常使用是没有问题的。

但现在我需要取消它们的内存对齐,用以读取二进制文件。
于是我在C代码中添加了
#pragma pack(1)
同时,当我在Fortran中用sequence取消内存对齐时,编译器却不让我这么做,提示“Error: Derived type 'mytype' at (1) cannot have the SEQUENCE attribute because it is BIND(C)”.

我该如何同时在Fortran和C两头都取消内存对齐?

fcode 发表于 2024-10-20 09:13:57

语法标准没有这部分内容,具体要看编译器是否支持。
比如 intel fortran 可以用
!DEC$ PACK:1
type,bind(c):: MyType
      character(c_char):: str(3)
      integer(c_int):: i
end type
!DEC$ PACK
对于 gfortran 你可以尝试用 -fpack-structs=1 编译选项

愤怒的三炮 发表于 2024-10-20 10:37:41

fcode 发表于 2024-10-20 09:13
语法标准没有这部分内容,具体要看编译器是否支持。
比如 intel fortran 可以用


成功了,感谢雪球{:2_31:}
页: [1]
查看完整版本: Fortran与C的内存对齐