c - 结构指针兼容性

标签 c casting struct ansi

假设我们有两个结构:

typedef struct Struct1
{
    short a_short;
    int id;
} Struct1;

typedef struct Struct2
{
    short a_short;
    int id;
    short another_short;
} Struct2;

Struct2 * 转换为 Struct1 * 是否安全? ANSI 规范对此有何规定? 我知道一些编译器可以选择重新排序结构字段以优化内存使用,这可能会导致两个结构不兼容。有什么方法可以确保此代码有效,而不管编译器标志如何?

谢谢!

最佳答案

据我所知,这是安全的。

但如果可能的话,这样做会好得多:

typedef struct {
    Struct1 struct1;
    short another_short;
} Struct2;

然后您甚至告诉编译器 Struct2Struct1 的实例开始,并且由于指向结构的指针始终指向它的第一个成员,所以您将 Struct2 * 视为 Struct1 * 是安全的。

关于c - 结构指针兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702713/

相关文章:

Java:将(长)对象转换为 double 的多种方法

c - 如何制作链表函数库

ios - Objective-C - 类似于 CLLocationCoordinate2DMake 的自定义结构 'make' 方法

检查二叉树中的子代求和属性

c - 动画窗口图标

c++ - C 中的 neo4j-client,语句中的原始类型编码(即 int)

c - 使用 OpenSSL AES 命令行工具和 OpenSSL AES API 时出现不同的密文?

JavaScript 转换 - 为什么比较 "5"> "300"返回 true?

java - 具有与声明类型相同的接口(interface)类型的参数的接口(interface)方法

json - 具有多个动态命名字段的 Golang Json 解码