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两头都取消内存对齐?
语法标准没有这部分内容,具体要看编译器是否支持。
比如 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 编译选项
fcode 发表于 2024-10-20 09:13
语法标准没有这部分内容,具体要看编译器是否支持。
比如 intel fortran 可以用
成功了,感谢雪球{:2_31:}
页:
[1]