Behavior of comma operator in C [duplicate]

﹥>﹥吖頭↗ 提交于 2019-12-08 10:08:58

问题


If I write code using comma operator like this:

int i;
i = 5, i++, i++;

does it invoke undefined behavior?


回答1:


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 therefore 5 will bind to = as

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

Since operands of comma operator guaranteed to evaluates from left to right, i = 5 will be evaluated first and i will be assigned 5, then the second expression i++ will be evaluated and i will be 6 and finally the third expression will increment i to 7.

The above statement is equivalent to

i = 5;
i++;
i++;



回答2:


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.




回答3:


No, does not invoke undefined behavior because the comma operator is a sequence point. i is assigned a value of 5 and then incremented twice.



来源:https://stackoverflow.com/questions/46212001/behavior-of-comma-operator-in-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!