use*_*323 5 c arrays initialization compiler-warnings multidimensional-array
我试图通过使用以下行将用户定义类型的2D数组初始化为零,
qmf_t X_hybrid_left[32][32] = {{0}};
Run Code Online (Sandbox Code Playgroud)
qmf_t用户定义的类型在哪里.在这里我得到编译器警告,
警告:初始化程序周围缺少大括号[-Wmissing-braces]"
但如果我使用,qmf_t X_hybrid_left[32][32] = {{{0}}};即每边3个括号,警告就会消失.
每侧使用三个支架是否正确?这是什么意思?
Moh*_*ain 12
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}}};
Run Code Online (Sandbox Code Playgroud)
从C11规范,6.7.9初始化语法
initializer:
assignment-expression
{initializer-list}
{initializer-list,}
虽然在您的特定情况下(将2个数组的所有对象归零),但qmf_t X_hybrid_left[32][32] = {0};工作方式相同,qmf_t X_hybrid_left[32][32] = {{{0}}};但编译器可能会警告您.
但是如果你想要任何非零初始化,你需要使用多个大括号.
从同一部分:
[16]否则,具有聚合或联合类型的对象的初始值设定项应该是元素或命名成员的大括号括起来的初始值设定项列表.
[20]如果聚合或联合包含聚合或联合的元素或成员,则这些规则将递归地应用于子聚合或包含的联合.如果子集合或包含的并集的初始值设定项以左括号开头,则由该括号括起的初始值设定项及其匹配的右括号初始化子集合或所包含的并集的元素或成员.否则,仅从列表中获取足够的初始值设定项以考虑子集合的元素或成员或所包含的并集的第一个成员; 任何剩余的初始值设定项都用于初始化当前子聚合或包含的union所属的聚合的下一个元素或成员.