issue with assignment operator inside printf()

…衆ロ難τιáo~ 提交于 2019-12-07 16:54:17

Your code produces undefined behavior. Function argument evaluations are not sequenced relative to each other. Which means that modifying access to x in x=1 is not sequenced with relation to other accesses, like the one in x*1. The behavior is undefined.

Once again, it is undefined not because you "used assignment operator or modifying value inside printf()", but because you made a modifying access to variable that was not sequenced with relation to other accesses to the same variable. This code

(x = 1) + x * 1

also has undefined behavior for the very same reason, even though there's no printf in it. Meanwhile, this code

int x, y;
printf("%d %d", x = 1, y = 5);

is perfectly fine, even though it "uses assignment operator or modifying value inside printf()".

dbush

Within a function call, the function parameters may be evaluated in any order.

Since one of the parameters modifies x and the others access it, the results are undefined.

The Standard states that;

Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored.

It doesn't impose an order of evaluation on sub-expressions unless there's a sequence point between them, and rather than requiring some unspecified order of evaluation, it says that modifying an object twice produces undefined behaviour.

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