簡體   English   中英

按名稱初始化結構的數組成員

[英]Initializing an array member of a struct by name

我有一個看起來像這樣的結構:

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}};

我已閱讀以下內容,但他們沒有回答這個問題:
將結構初始化為0
將struct初始化/重置為零/ null
在C ++中初始化類的靜態數組成員的更好方法(雖然const是首選)
如何將數組的所有成員初始化為相同的值?

所以我寫了這個問題,然后進行了一段時間的實驗,發現以下內容可行:

static MY_STRUCT_T my_struct = {.c={5,5,5,5,5}};

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]; 真的沒什么。

缺乏可維護的編碼范例,請考慮這一點 - 逐個復制

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM