簡體   English   中英

嘗試使用兩個初始化列表初始化2D結構數組時發出警告

[英]Warning when trying to initialize a 2D struct array with two initializer lists

我試圖通過使用以下行將用戶定義類型的2D數組初始化為零,

qmf_t X_hybrid_left[32][32] = {{0}};

其中qmf_t是用戶定義的類型。 在這里我得到編譯器警告,

警告:初始化程序周圍缺少大括號[-Wmissing-braces]“

但如果我使用, qmf_t X_hybrid_left[32][32] = {{{0}}}; ,即每側3個括號,警告消失。

每側使用三個支架是否正確? 這是什么意思?

qmf_t X_hybrid_left[32][32] = {  /* Row initializers next */
                                { /* Col initializers next */
                                  { /* Struct initializers next */
                                     0
                                  }
                                }
                              };
qmf_t a = {0};
qmf_t b[5] = {{0}};
qmf_t c[10][5] = {{{0}}};

從C11規范, 6.7.9初始化語法

初始化:
賦值表達式
{initializer-list}
{initializer-list,}

雖然在您的特定情況下(將2個數組的所有對象歸零),但qmf_t X_hybrid_left[32][32] = {0}; 將與qmf_t X_hybrid_left[32][32] = {{{0}}};相同qmf_t X_hybrid_left[32][32] = {{{0}}}; 但編譯器可能會警告你。

但是如果你想要任何非零初始化,你需要使用多個大括號。

從同一部分:

[16]否則,具有聚合或聯合類型的對象的初始值設定項應為元素或命名成員的大括號括起來初始值設定項列表

[20]如果聚合或聯合包含聚合或聯合的元素或成員,則這些規則將遞歸地應用於子聚合或包含的聯合。 如果子集合或包含的並集的初始值設定項以左括號開頭,則由該括號括起的初始值設定項及其匹配的右括號初始化子集合或所包含的並集的元素或成員。 否則,僅從列表中獲取足夠的初始值設定項以考慮子集合的元素或成員或所包含的並集的第一個成員; 任何剩余的初始值設定項都用於初始化當前子聚合或包含的union所屬的聚合的下一個元素或成員。

暫無
暫無

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

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