c 嵌入式:使用已定义的结构变量名称进行静态结构初始化

c embedded: static struct initialization with defined struct variable name

正在创建这个结构:

typedef enum {

  IDLE = 0,

  SENT  = 1,

  RECEPTION     = 2,

  DONE          = 3,

  ABORT               = 4,

} State_t;



typedef struct {

    State_t state;

    u8 N;

    u8 last;

    u16 time;

}__attribute__((packed)) Context_t;

想用结构变量名初始化它。这给了我一个错误:

static Context_t arr[MAX_CONTEXT] = {
    
            .state = IDLE, .N= 1, .last= 0, .time= 0
    
        };

还有这个:

  static Context_t arr[MAX_CONTEXT];

    arr = {

        .state = IDLE, .N= 1, .last= 0, .time= 0

    };

这当然有效,但不是我想要的:

static Context_t arr[MAX_CONTEXT] = {
    
            IDLE, 1,  0, 0
    
        };

有人有更好的方法来实现这个结构吗?

取决于编译器,但也许可以试试这个:

    static Context_t arr[MAX_CONTEXT] = {
        {.state=IDLE, .N=1, .last=0, .time=0}, // 0
        {.state=IDLE, .N=1, .last=0, .time=0}, // 1
        ...
        {.state=IDLE, .N=1, .last=0, .time=0}  // MAX_CONTENT
    };

您会收到错误,因为使用单个结构项的初始值设定项初始化结构数组通常没有意义。

如果您打算只初始化数组中的第一项,那么它应该是:

static Context_t arr [MAX_CONTEXT] = 
{
  { .state = IDLE, .N= 1, .last= 0, .time= 0 },
};

或者如果您愿意:[0] = { .state = IDLE, .N= 1, .last= 0, .time= 0 },