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