If I write code using comma operator like this:
int i;
i = 5, i++, i++;
does it invoke undefined behavior?
If I write code using comma operator like this:
int i;
i = 5, i++, i++;
does it invoke undefined behavior?
On
does it invoke undefined behavior?
No, because of both the sequence points the comma operator introduces and operator precedence. A sequence point assures that all side effects of the previous evaluations have been performed before evaluating the following expressions.
Sequence points and operator precende assure that in the i = 5, i++, i++; statement, i will be initialized before evaluating any of the i++ expressions.
The statement:
i = 5, i++, i++;
is, considering operator precedence, equivalent to:
((i = 5), i++), i++;
So, first (i = 5) is evaluated. After its side effects are over (i.e.: after i is initialized to 5), the following expression, i++ is evaluated. Again, after the side effect this last expression introduces is over (i.e.: i is increased by one), the last expression, i++, is evaluated.
No. It will not invoke undefined behavior as there is a sequence point between evaluation of left and right operands of comma operators.
=has higher precedence than that of,operator and therefore5will bind to=asSince operands of comma operator guaranteed to evaluates from left to right,
i = 5will be evaluated first andiwill be assigned5, then the second expressioni++will be evaluated andiwill be6and finally the third expression will incrementito7.The above statement is equivalent to