7

I've an expression of the form shown below :-

while (count)
{
...
...

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

Now Ternary operators are sequence points in C but I believe that the sequence point ends at the test part.

Is this understanding correct and as such will this statement lead to undefined behaviour ?

ani627
  • 5,578
  • 8
  • 39
  • 45
Zshn
  • 121
  • 1
  • 5

1 Answers1

12

Right. There's a sequence point after the evaluation of the condition, but the next sequence point is the semicolon terminating the statement. So whenever count != 20, you have the undefined behaviour

index = index++;

since index is modified twice without intervening sequence point.

Daniel Fischer
  • 181,706
  • 17
  • 308
  • 431
  • 5
    And the opposite: `index = (index++ == 20) ? 0 : something;` is well-defined behavior (although poor programming practice). – Lundin Jun 12 '12 at 11:53