温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c - issue with assignment operator inside printf()
c gcc printf assignment-operator

c - printf()中赋值运算符的问题

发布于 2020-03-27 12:06:23

这是代码

int main()
{
  int x=15;
  printf("%d %d %d %d",x=1,x<20,x*1,x>10);
  return 0;
}

和输出是 1 1 1 1

我原本以为1 1 15 1输出

x*1等于15但这里x*11,为什么?使用赋值运算符或修改内部值会printf()导致undefined behaviour

查看更多

查看更多

提问者
udit043
被浏览
134
AnT 2015-07-23 23:53

您的代码产生未定义的行为。函数参数评估不相对于彼此排序。这意味着修改xin的访问权限x=1不会与其他访问权限相关,例如in中的访问权限x*1该行为是不确定的。

再一次,它是不确定的,这不是因为您“在printf()中使用了赋值运算符或修改值”,而是因为您对变量进行了修改访问,该访问未与相对于同一变量的其他访问相关地排序此代码

(x = 1) + x * 1

出于相同的原因,printf也具有未定义的行为,即使其中没​​有同时,这段代码

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

即使它“使用赋值运算符或在printf()内修改值”也很好。