我有一个看起来像这样的结构:
typedef struct
{
uint32_t a;
uint32_t b;
uint32_t c[5];
uint32_t d;
} MY_STRUCT_T;
我想按名称将c
初始化为非零值。我希望其他一切都是0.
如果c
不是数组,我可以这样做:
static MY_STRUCT_T my_struct = {.b = 1};
我知道我可以这样做:
static MY_STRUCT_T my_struct = {.c[0]=5,
.c[1]=5,
.c[2]=5,
.c[3]=5,
.c[4]=5};
但我想知道是否有更优雅的语法我不知道: 类似的东西:
static MY_STRUCT_T my_struct = {.c[] = {5,5,5,5,5}};
我已阅读以下内容,但他们没有回答这个问题:
Initializing a struct to 0
Initialize/reset struct to zero/null
A better way to initialize a static array member of a class in C++ ( const would be preferred though )
How to initialize all members of an array to the same value?
答案 0 :(得分:3)
所以我写了这个问题,然后进行了一段时间的实验,发现以下内容可行:
static MY_STRUCT_T my_struct = {.c={5,5,5,5,5}};
答案 1 :(得分:0)
OP有3个目标:1)字段数组大小是固定宽度,2)像{7,7,7,7,7}
这样的初始化是固定宽度,3)c
到非零值。由于#1和#2的大小独立编码,3个目标中的2个可以满足,但不是全部3个 - 这很棘手。
如果MY_STRUCT_T my_struct = {.c = {5,5,5,5,5}};
稍后成为uint32_t c[5];
,那么阻止/警告uint32_t c[6];
未达到目标的是什么?没什么。
缺乏可维护的编码范例,请考虑this - copy one by one