问题:
是否可以安全地读/写一个以确保跨平台和编译器的方式将 C 结构体转换为文件兼容性?
答案:
不,这是不可能的,因为 C 中缺乏二进制级标准化。
根据 Don Box ,C 缺乏二进制级别的标准化,这意味着不同的编译器可能会以不同的方式实现结构填充。即使在同一个编译器中,结构体的打包对齐方式也可能因所使用的编译指示包而异。
此外,结构体中成员的顺序可能会影响其大小。例如,具有相同成员但声明顺序不同的结构体可以具有不同的大小。
示例:
struct A { char c; char d; int i; }; struct B { char c; int i; char d; };
使用 gcc-4.3.4 编译上述代码会产生:
8 12
这表明即使两个结构体具有相同的成员,它们的大小
结论:
标准没有指定如何实现填充,由编译器自行决定。因此,不可能假设所有编译器都会应用相同的填充规则,从而难以实现跨平台兼容性。
以上是C 结构体可以跨平台和编译器安全地读写吗?的详细内容。更多信息请关注PHP中文网其他相关文章!