Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is this Undefined Behavior?

Why does the following given expression invoke undefined behavior?

int i = 5;
i = (i,i++,i) + 1 

My question is influenced by Als' question here

like image 845
McCoy Avatar asked Nov 05 '10 11:11

McCoy


1 Answers

It isn't undefined.

Answered here for C, Sequence points and partial order

I think the same applies in C++ (and here's my response before I saw that link):

The comma operator introduces a sequence point (and constrains to some extent the order in which the expression must be evaluated - left before right), so:

  • the two modifications of i are separated by a sequence point (the second comma).
  • the modification of i in i++ is separated from everything else by sequence points.
  • the modification of i by = is not separated from the last occurrence of i in the expression, but that's OK because we're allowed to access i and modify it without an intervening sequence point, provided that the access is "to determine the value to be stored" (5/4).
  • As Als says, in practice it wouldn't matter whether that code has defined behavior or not provided that everyone had the basic common sense not to write it ;-)
like image 123
6 revs Avatar answered Oct 21 '22 17:10

6 revs