当前位置:  开发笔记 > 编程语言 > 正文

为什么struct/union兼容性需要标记和名称相等?

如何解决《为什么struct/union兼容性需要标记和名称相等?》经验,为你挑选了0个好方法。

C99标准在6.2.7.1节中具有以下语言:

如果它们的标记和成员满足以下要求,则在单独的转换单元中声明的两个结构,联合或枚举类型是兼容的:如果使用标记声明一个,则另一个应使用相同的标记声明.如果两者都是完整类型,则以下附加要求适用:其成员之间应存在一对一的对应关系,使得每对相应成员都声明为具有兼容类型,并且如果相应对的一个成员是使用名称声明,另一个成员使用相同的名称声明.对于两个结构,相应的成员应按相同的顺序声明.对于两个结构或联合,相应的位域应具有相同的宽度.对于两个枚举,相应的成员应具有相同的值.(重点补充)

特别是,此规则使这两个struct具有相同布局的s不兼容,因为它们的标记和成员名称不匹配:

struct x_type {
    int x;
};

struct y_type { // << Different tag
    int y;      // << Different member name
};

很容易理解为什么成员类型及其声明顺序必须相同.但是,不清楚为什么标签和成员名称也需要匹配,即使它们不影响二进制布局struct

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有