Inizializzazione di un array booleano in C

Inizializzazione di un array booleano in C


Mi sono imbattuto in un comportamento strano per il quale non sono riuscito a trovare alcuna informazione online. Se inizializzo un array booleano come questo:


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

Ottengo l'output che mi aspetto, il primo e il sesto valore sono veri mentre gli altri sono falsi. Ma se scrivo il seguente snippet:


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

Ottengo il primo, il SECONDO e il sesto valore come veri. Presumo che sia una sorta di comportamento indefinito, ma vorrei che qualcuno più informato di me mi spiegasse cosa sta succedendo.


Sto compilando con flag di avviso aggiuntivi, utilizzando GCC e "-std=gnu99" e non ricevo errori.


Risposte:


C dice che:



e in C99



Ciò significa che la dichiarazione


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

può avere lo stesso comportamento:


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

o come


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

se condition[5] = true la valutazione viene effettuata prima o dopo il 0 inizializzazione dei membri dell'array.


MODIFICA :si è verificato un caso di ordine di inizializzazione non specificato degli elementi dell'array nel rapporto sui difetti n. 208. Il caso è diverso perché nell'esempio DR sono presenti due inizializzatori per un singolo elemento.


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