2012-06-12 12 views
6

Ich habe einen Ausdruck der Form wie folgt dar: -Ternary Operator und Sequenzpunkte in C

while (count) 
{ 
... 
... 

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

Jetzt Ternary Operatoren sind Sequenzpunkte in C, aber ich glaube, dass die Sequenz Punkt, an dem Testteil endet.

Ist dieses Verständnis korrekt und führt diese Aussage zu undefiniertem Verhalten?

+1

Ich denke, Sie meinen Sequenzpunkte .. – SuperSaiyan

+0

Mein schlechtes. korrigiere es jetzt. – Zshn

+1

Warum hast du überhaupt diesen Code geschrieben anstatt: 'index = (count == 20)? 0: index + 1; ' –

Antwort

11

Rechts. Es gibt einen Sequenzpunkt nach der Auswertung der Bedingung, aber der nächste Sequenzpunkt ist das Semikolon, das die Anweisung beendet. Also, wenn count != 20, haben Sie das nicht definiertes Verhalten

index = index++; 

seit index geändert wird zweimal ohne Sequenzpunkt dazwischen.

+5

Und das Gegenteil: 'index = (index ++ == 20)? 0: etwas; 'ist wohldefiniertes Verhalten (obwohl schlechte Programmierpraxis). – Lundin