gpt4 book ai didi

c - 结构并以两种不同的方式引用它们

转载 作者:太空宇宙 更新时间:2023-11-03 23:35:37 25 4
gpt4 key购买 nike

我正在阅读某人的代码,我不明白为什么他在下面的每个 union 内引用不同。

-在第一个上,他可以通过键入 pwr_cmd.EN1 来引用内部- 在第二个上,他可以通过键入 errors.Bits.ERR1 来引用内部- 如果我从第二个中删除 Bits,我是否能够像第一个一样在内部引用:errors.ERR1? - 两者之间有什么区别,为什么要先做一个再做另一个?谢谢。

typedef union {
byte Byte;
union {
struct {
byte EN1 :1;
byte EN2 :1;
byte EN3 :1;
byte EN4 :1;
byte :4;
};
struct {
byte :2;
byte EN34 :2;
byte :4;
};
struct {
byte :2;
byte EN3r:1;
byte EN4r:1;
byte :4;
};

};
} pwr_cmd;



typedef union {
word Word;
union {
struct {
byte ERR1 :1;
byte ERR2 :1;
byte ERR3 :1;
byte ERR4 :1;
byte ERR5 :1;
byte ERR6 :1;
byte ERR7 :1;
byte ERR8 :1;
byte ERR9 :1;
byte DET1 :1;
byte DET2 :1;
byte FAIL1 :1;
byte PWR1 :1;
byte PWR2 :1;
byte PWR3 :1;
byte PWR4 :1;
} Bits;
nibble4 Nibble4;
};
} errors;

最佳答案

这是一个位域的例子——每个带有“:”的变量代表一个整数的特定位数。该位域被并集化,以允许根据上下文对相同的位位置进行不同的命名。

为了清晰起见,您可以访问一个 union 成员而不是另一个成员,并表示您的代码的意图 - 这是一种 self 记录代码的好方法,方法是创建有意义的名称而不是像“位 4”这样无意义的名称。

重新阅读您的问题 - 两者之间的区别在于一个使用命名结构而另一个不使用。在第一种情况下,无需执行结构成员引用 (".") 即可访问结构成员,因为它们没有名称。在第二个中,他声明了一个带有名称的结构,因此使用了结构成员引用。在我看来,第二个更清晰,但第一个更简洁。这是风格和偏好的问题。

关于c - 结构并以两种不同的方式引用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4536838/

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