2012-06-12 11 views
6

Ho un'espressione della forma mostrata di seguito: -ternari dell'operatore e Sequence Punti in C

while (count) 
{ 
... 
... 

    index = ((count == 20)? 0 : index++); 
... 
... 
} 

Ora gli operatori ternari sono punti di sequenza in C, ma credo che il punto di sequenza termina alla parte di prova.

Questa comprensione è corretta e, come tale, questa affermazione porterà a un comportamento indefinito?

+1

Penso che voglia dire punti sequenza .. – SuperSaiyan

+0

Il mio male. corretto ora – Zshn

+1

Perché hai persino scritto quel codice piuttosto che: 'index = (count == 20)? 0: indice + 1; ' –

risposta

11

Diritto. C'è un punto di sequenza dopo la valutazione della condizione, ma il punto successivo della sequenza è il punto e virgola che termina l'istruzione. Così ogni volta che count != 20, avete il comportamento indefinito

index = index++; 

dal index viene modificata due volte senza intervenire punto sequenza.

+5

E il contrario: 'index = (index ++ == 20)? 0: qualcosa; 'è un comportamento ben definito (anche se una cattiva pratica di programmazione). – Lundin