按名称初始化结构的数组成员

时间:2016-09-12 20:45:02

标签: c

我有一个看起来像这样的结构:

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?

2 个答案:

答案 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