我有一个 union ,它是一个数组在三个 float 上的叠加:
union {
float currents[3];
struct {
float run;
float standby;
float sleep;
};
} MyCurrents;
run
可以通过 MyCurrents.run
或 MyCurrents.currents[0]
访问。
有没有办法让 currents
数组匿名,这样我就可以通过简单地使用 MyCurrents[0]
访问 run
?在这个用例中,使用 .
访问器似乎有点多余。
我意识到我可以使用 ((float*)&MyCurrents)[0]
但这太糟糕了,我不确定它是否真的是一种可靠的使用方法。
最佳答案
根据 C 标准,作为结构或 union 的成员可以是匿名的。这是可行的,因为它们中的成员不是匿名的,因此封闭结构或 union 中的每个子对象都有一个名称。不支持其他类型的匿名成员(除了用于填充的位字段可能是匿名的,但它们通常也不可访问)。
(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;
。 )
关于c - C是否支持 union 的匿名成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52446237/