Inicialización de matriz booleana en C

Inicialización de matriz booleana en C


Me he topado con un comportamiento extraño para el que no pude encontrar ninguna información en línea. Si inicializo una matriz booleana como esta:


 bool condition[10] = {true,[5]=true};

Obtengo el resultado que espero, los valores primero y sexto son verdaderos mientras que otros son falsos. Pero si escribo el siguiente fragmento:


 bool condition[10] = {true,condition[5]=true};

Obtengo los valores primero, segundo y sexto como verdaderos. Supongo que es algún tipo de comportamiento indefinido, pero me gustaría que alguien más informado que yo me explicara qué está pasando.


Estoy compilando con banderas de advertencia adicionales, usando GCC y "-std=gnu99", y no recibo ningún error.


Respuestas:


C dice que:



y en C99



Eso significa que la declaración


    bool condition[10] = {true,condition[5]=true};

puede tener el mismo comportamiento:


    bool condition[10] = {true, 1};

o como


    bool condition[10] = {true, 1, [5] = true};

si condition[5] = true la evaluación se realiza antes o después del 0 inicialización de los miembros de la matriz.


EDITAR :hay un caso de orden de inicialización no especificado de los elementos de la matriz en el Informe de defectos n.º 208. El caso es diferente porque en el ejemplo de DR hay dos inicializadores para un solo elemento.


http://www.open-std.org/jtc1/sc22/wg14/www/docs/9899tc1/n32074.htm