c - C是否支持 union 的匿名成员?

标签 c

我有一个 union ,它是一个数组在三个 float 上的叠加:

union {
    float currents[3];
    struct {
        float run;
        float standby;
        float sleep;
    };
} MyCurrents;

run 可以通过 MyCurrents.runMyCurrents.currents[0] 访问。

有没有办法让 currents 数组匿名,这样我就可以通过简单地使用 MyCurrents[0] 访问 run?在这个用例中,使用 . 访问器似乎有点多余。

我意识到我可以使用 ((float*)&MyCurrents)[0] 但这太糟糕了,我不确定它是否真的是一种可靠的使用方法。

最佳答案

根据 C 标准,作为结构或 union 的成员可以是匿名的。这是可行的,因为它们中的成员不是匿名的,因此封闭结构或 union 中的每个子对象都有一个名称。不支持其他类型的匿名成员(除了用于填充的位字段可能是匿名的,但它们通常也不可访问)。

(C 语法允许您包含没有名称的声明(C 2018 6.7.2.1 1:struct-declarator-liststruct-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/

相关文章:

C 字符数组的意外输入

c - 用 C 语言为 LC3 汇编器编写自定义分词器

整数的可计算大小

c - 如何让 getchar() 不能得到我之前做的 ENTER?(在 C 中)

c++ - 指向字符串和字符的指针捕获 22

c - 输入字母导致程序崩溃,只需要输入数字

c - 将行存储到动态结构中

c - 在 C 中使用 fread 从 stdin 缓冲读取

c中的组合位和逻辑运算符

c - C中的 volatile 变量或 volatile 结构问题