Warm tip: This article is reproduced from stackoverflow.com, please click
c gcc printf assignment-operator

issue with assignment operator inside printf()

发布于 2020-03-27 10:31:46

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?

Questioner
udit043
Viewed
93
AnT 2015-07-23 23:53

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()".