首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个工会合法吗?

这个工会合法吗?
EN

Stack Overflow用户
提问于 2022-06-02 09:18:25
回答 1查看 58关注 0票数 0

我正在重新工作和清理前同事的代码。我创建了一个联盟,以简化他设计的UART传输协议对消息的“解析”和“构造”。

示例消息:!cx:000:2047

第一个字符指示参数(由第二个和第三个字符定义,在本例中为cx)是应该设置(!)还是返回(?)给消息的发送方。如果需要,消息的地址部分(000)定义数组中的索引,指定的值(在本例中为2047)应该写入该数组中。命令、地址和值使用:字符分隔。

我本可以使用strtok()来使用分隔字符分隔消息,但是接收缓冲区的大小固定为12个字符,发送方函数确保消息的格式正确,并且我发现这个方法是最容易阅读和理解的。

但现在,我已经看到了this的线程,我不太确定折叠联合是否合法:

代码语言:javascript
复制
typedef union UartMessage
{
    char msg[12];
    struct
    {
        char dir;           //[0]:      set/get
        char param[2];      //[1-2]:    parameter to set/get
        char separator1;    //[3]:      ':' separator
        char addr[3];       //[4-6]:    memory array index (used for current and speed arrays)
        char separator2;    //[7]:      ':' separator
        char value[4];      //[8-11]:   value to set
    };
} uartMsg_t;
EN

回答 1

Stack Overflow用户

发布于 2022-06-02 09:52:27

从添加匿名结构的C11开始,这是合法的。

但是,如果没有在嵌入式结构中引入额外的填充,我建议添加一个断言。

代码语言:javascript
复制
_Static_assert(offsetof(uartMsg_t, value[4]) == 12, "extra padding");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72473754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档