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 },
正在创建这个结构:
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 },