匿名struct +复合文字会导致lint错误

时间:2014-01-02 18:51:32

标签: c struct anonymous-types lint compound-literals

我的嵌入式C99兼容程序中有多个结构(以微芯片编译器使用的定义类型为模型,尽管这不是微芯片应用程序)。这是一个典型的例子:

typedef struct
{
  union
  {
    struct
    {
      CommandDirection_t ReadWrite  : 1;
      RegisterAddress_t Register    : 7;
    };
    uint8_t Byte;
  };
} MemsAccelCommand_t;

CommandDirection_t和RigisterAddress_t是枚举。稍后在我的代码中,我声明并初始化我的结构:

MemsAccelCommand_t command = { .ReadWrite = CMD_Read };

这没有警告或错误编译,但是当我lint文件时,我收到错误:“错误65:预期成员名称。”

如何调整我的代码以便不再引发lint错误,或者我该如何为此禁用lint警告(除了禁用错误65)?

1 个答案:

答案 0 :(得分:0)

为union和最里面的结构命名,如:

typedef struct
{
  union
  {
    struct
    {
      CommandDirection_t ReadWrite  : 1;
      RegisterAddress_t Register    : 7;
    } Byte_struct;
    uint8_t Byte;
  } Byte_union;
} MemsAccelCommand_t;

否则,您打算如何访问联合字段?工会必须有一个名字。