2012-06-12 29 views
6

mam wyraz formie przedstawionej poniżej: -trójskładnikowych operatora i kolejność punktów w C

while (count) 
{ 
... 
... 

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

Teraz operatorzy trójskładnikowych są punkty sekwencji w C, ale wierzę, że punkt sekwencja kończy się w części testowej.

Czy to zrozumienie jest poprawne i jako takie stwierdzenie może prowadzić do niezdefiniowanych zachowań?

+1

Myślę, że masz na myśli punkty sekwencji .. – SuperSaiyan

+0

Mój zły. poprawiłem to teraz. – Zshn

+1

Dlaczego napisałeś ten kod zamiast: index = (count == 20)? 0: index + 1; ' –

Odpowiedz

11

Dobrze. Po ocenie warunku istnieje punkt sekwencji, ale następnym punktem sekwencji jest średnik kończący instrukcję. Więc gdy count != 20 masz niezdefiniowane zachowanie

index = index++; 

od index jest modyfikowany dwa razy bez interwencji punkt sekwencji.

+5

I odwrotnie: "index = (indeks ++ == 20)? 0: coś; 'jest dobrze zdefiniowanym zachowaniem (chociaż słaba praktyka programowania). – Lundin