Estoy tratando de inicializar una matriz 2D de tipo definido por el usuario a cero usando la siguiente línea,
qmf_t X_hybrid_left[32][32] = {{0}}; Donde qmf_t es un tipo definido por el usuario. Aquí recibo la advertencia del compilador,
advertencia: faltan llaves alrededor del inicializador [-Wmissing-braces]"
Pero si uso, qmf_t X_hybrid_left[32][32] = {{{0}}}; , es decir, 3 llaves a cada lado, la advertencia desaparece.
¿Es correcto usar tres llaves en cada lado? ¿Qué significa?
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}}};De las especificaciones C11, 6.7.9 Gramática de inicialización
inicializador:
expresión-asignación
{ lista de inicializadores }
{ lista de inicializadores , }
Aunque en su caso particular (poner a cero todos los objetos de 2 matrices), qmf_t X_hybrid_left[32][32] = {0}; funcionará igual que qmf_t X_hybrid_left[32][32] = {{{0}}}; pero el compilador puede advertirle.
Pero si desea una inicialización distinta de cero, debe usar varias llaves.
De la misma sección:
[16] De lo contrario, el inicializador para un objeto que tiene un tipo agregado o unión será una lista de inicializadores entre llaves para los elementos o miembros nombrados.
[20] Si el agregado o unión contiene elementos o miembros que son agregados o uniones, estas reglas se aplican recursivamente a los subagregados o uniones contenidas. Si el inicializador de un subagregado o unión contenida comienza con una llave izquierda, los inicializadores encerrados por esa llave y su llave derecha coincidente inicializan los elementos o miembros del subagregado o la unión contenida. De lo contrario, solo se toman en cuenta suficientes inicializadores de la lista para los elementos o miembros del subagregado o el primer miembro de la unión contenida; los inicializadores restantes se dejan para inicializar el siguiente elemento o miembro del agregado del que forma parte el subagregado actual o la unión contenida.