gpt4 book ai didi

c - struct { ... } 和 struct { union { struct { ... } } } 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 15:07:37 27 4
gpt4 key购买 nike

DISK_DETECTION_INFO is defined as有什么原因吗?

typedef struct _DISK_DETECTION_INFO {
DWORD SizeOfDetectInfo;
DETECTION_TYPE DetectionType;
union {
struct {
DISK_INT13_INFO Int13;
DISK_EX_INT13_INFO ExInt13;
};
};
} DISK_DETECTION_INFO, *PDISK_DETECTION_INFO;

代替

typedef struct _DISK_DETECTION_INFO {
DWORD SizeOfDetectInfo;
DETECTION_TYPE DetectionType;
DISK_INT13_INFO Int13;
DISK_EX_INT13_INFO ExInt13;
} DISK_DETECTION_INFO, *PDISK_DETECTION_INFO;

还是我只是过度分析了这段代码?

最佳答案

可以说,这是一个错误。然而,可能我们只得到结构的公共(public)定义。在内部(当由 Windows 内核使用时),它可能被定义为:

typedef struct _DISK_DETECTION_INFO {
DWORD SizeOfDetectInfo;
DETECTION_TYPE DetectionType;
union {
struct {
DISK_INT13_INFO Int13;
DISK_EX_INT13_INFO ExInt13;
};
DISK_INTERNAL_INFO Private; // Used internally, when DetectionType = -1
};
} DISK_DETECTION_INFO, *PDISK_DETECTION_INFO;

我不认为这是可维护的、安全的或可移植的,但它是可能的

DISK_INTERNAL_INFO 甚至可以超过匿名 struct 的大小 - 如果用户从不自己实例化对象,该技术甚至可能被认为可用于隐藏额外数据来自用户,但保持结构不变。他们永远不会“看到”匿名的 struct

关于c - struct { ... } 和 struct { union { struct { ... } } } 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7376552/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com