我有一个并集,它是数组在三个浮点数上的叠加层:
union {
float currents[3];
struct {
float run;
float standby;
float sleep;
};
} MyCurrents;
run
可以通过MyCurrents.run
或MyCurrents.currents[0]
访问。
有没有一种方法可以使currents
匿名,这样我可以通过使用run
来访问MyCurrents[0]
?在此用例中,拥有.
访问器似乎有些多余。
我意识到我可以使用((float*)&MyCurrents)[0]
,但这太可怕了,我不确定这是否是可靠的使用方法。
答案 0 :(得分:3)
根据C标准,结构或联合的成员可能是匿名的。之所以可行,是因为其中的成员不是匿名的,因此封闭结构或联合中的每个子对象都有一个名称。不支持其他类型的匿名成员(用于填充的位字段可以是匿名的,但通常也无法访问)。
(C语法允许您包含不带名称的声明(C 2018 6.7.2.1 1: struct-declarator-list 在 struct-declaration 中是可选的) ,但是它们不会创建成员,因此无法引用它们。声明一个没有名称的成员需要省略语法的整个声明符,其中包括(根据6.7。1) *
代表指针,[
和]
代表数组,(
和)
代表函数,因此语法允许您声明struct { float; float f; } foo;
但不是struct { float [3]; float f; } foo;
。)