Here is the code
int main()
{
int x=15;
printf("%d %d %d %d",x=1,x<20,x*1,x>10);
return 0;
}
And output is 1 1 1 1
I was expecting 1 1 15 1
as output,
x*1
equals to 15
but here x*1
is 1
, Why ?
Using assignment operator or modifying value inside printf()
results in undefined behaviour
?
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()".