首页 >后端开发 >C++ >C 结构体可以跨平台和编译器安全地读写吗?

C 结构体可以跨平台和编译器安全地读写吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-20 13:17:22451浏览

Can C   Structs Be Safely Read and Written Across Platforms and Compilers?

C 结构体的跨平台读/写

问题:

是否可以安全地读/写一个以确保跨平台和编译器的方式将 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn