您的代码产生未定义的行为。函数参数评估不相对于彼此排序。这意味着修改x
in的访问权限x=1
不会与其他访问权限相关,例如in中的访问权限x*1
。该行为是不确定的。
再一次,它是不确定的,这不是因为您“在printf()中使用了赋值运算符或修改值”,而是因为您对变量进行了修改访问,该访问未与相对于同一变量的其他访问相关地排序。此代码
(x = 1) + x * 1
出于相同的原因,printf
它也具有未定义的行为,即使其中没有。同时,这段代码
int x, y;
printf("%d %d", x = 1, y = 5);
即使它“使用赋值运算符或在printf()内修改值”也很好。