2012-06-12 17 views
6

tengo una expresión de la forma mostrada a continuación: -ternarias de operador y la secuencia de puntos en C

while (count) 
{ 
... 
... 

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

Ahora los operadores ternarios son puntos de secuencia en C pero creo que el punto de secuencia termina en la pieza de ensayo.

¿Es correcto este entendimiento y, como tal, esta afirmación dará lugar a un comportamiento indefinido?

+1

Creo que te refieres a los puntos de secuencia .. – SuperSaiyan

+0

Mi mal. lo corrigió ahora. – Zshn

+1

¿Por qué incluso escribiste ese código en lugar de: 'index = (count == 20)? 0: índice + 1; ' –

Respuesta

11

Derecha. Hay un punto de secuencia después de la evaluación de la condición, pero el siguiente punto de secuencia es el punto y coma que termina la declaración. Así que cada vez count != 20, tiene el comportamiento indefinido

index = index++; 

desde index se modifica el doble sin intervenir punto de secuencia.

+5

Y todo lo contrario: 'index = (index ++ == 20)? 0: algo; 'es un comportamiento bien definido (aunque es una mala práctica de programación). – Lundin

Cuestiones relacionadas