【问题标题】:Is it possible to declare unions inside of a structure in C?是否可以在 C 中的结构内声明联合?
【发布时间】:2023-01-12 06:06:49
【问题描述】:

我想缩短我的代码,代码的目的是控制步进电机。我想保留步数(32位) 和旋转频率 (16位).我通过公共汽车收到这些信息uint8_t格式。我的想法是不必将每一位乘以 256/65535.... 来构成步骤和频率。我可以用联合来做到这一点,但我也想有多个电机,所以我决定为此声明一个结构,并在里面加入联合。它一直给我错误,所以我显然做错了什么。

我希望在结构内声明联合不会成为问题,因为联合占用的内存空间等于它的最大成员,它们可以是结构元素似乎是合理的。这是一个代码 sn-p:

struct Stepper_Motor
  {
        union Num_Steps
        {
            uint32_t Sum_Steps;
            uint8_t Arr_Steps[4];
        };

        union Rotation_freq
        {
            uint16_t Sum_Freq;
            uint8_t Arr_Freq[2];
        };

        uint8_t State;
  };

当我在声明后尝试访问结构成员时,当我写下其中一个成员时,IDE 会给我一个结构成员列表:

```
struct Stepper_Motor Motor1,Motor2,Motor3;

//Some code... //

Motor1.Arr_Freq[0] = something;  // this gives me an error,  "no members named Arr_Freq"
```

我还尝试了以下内容:

Motor1.Rotation_freq.Arr_Freq[0] = something;  //error

甚至可以做我想做的事吗?我是否必须在结构外部声明联合然后在其中引用它们,如果是这样,如何?这是使用联合的虚假方式,以节省必须编写乘法吗?

【问题讨论】:

    标签: c struct embedded unions


    【解决方案1】:

    如果您从联合中删除标记名称以便它们是匿名的,那么联合成员将显示为结构的成员。

    【讨论】:

    • 这解决了这个问题,现在它工作得很好。不知道你可以有匿名工会,谢谢!
    • @Alex_Stankov:如果答案解决了您的问题,那么您可能要考虑接受答案。有关详细信息,请参阅此官方帮助页面:What should I do when someone answers my question?
    • @Alex_Stankov,无需急于接受答案。
    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多