printf()内的整数运算

-1 c integer-arithmetic

C编程新手.为什么下面这段代码的输出不是0 20 0,而是它1 20 0

printf ( "\n%d %d %d", x != 1, x = 20, x < 30 ) ;
Run Code Online (Sandbox Code Playgroud)

我的理解是代码将x分配给1以外的值(1 = true因此!= true为0)?有人能指引我完成逻辑吗?

Lig*_*ica 7

我不知道为什么某些教育系统如此受欢迎,因此选择更具创造性的方法来教导具有未指定行为的错误代码,但由于评估这些参数的顺序未指定,因此程序的行为未定义.

也就是说,您可能假设代码是从左到右或从右到左"运行",但不需要这样的东西.事实上,任何事情都可能发生,包括任何输出或谋杀我的任何家庭.所以请不要!

  • @EricPostpischil未定义的行为可能会非常可怕.有一个示例程序执行函数,即使没有代码显式调用它,因为该函数调用只是不是未定义行为的路径.因此,编译器假定必须设置函数指针并且必须调用该函数.危险是真实的.反正有些危险.这将取决于从未调用过的代码(hah). (3认同)
  • 更好的措辞就是说"C标准没有定义行为". (2认同)
  • @EricPostpischil请参阅我的最后一段[这里](/sf/answers/3432282451/).分析UB特定"案例"的原因[绝对可以引人入胜和教育](/sf/ask/3788460371/)但老实说,有一个时间和地点,在我看来这不是它.当然,随意写一个对比鲜明的答案! (2认同)