混淆了包含前缀和后缀运算符的printf()

Mah*_*esh 1 c programming-languages

如果int var = 20则如何

printf("%d %d %d", var--, ++var, --var); 
Run Code Online (Sandbox Code Playgroud)

执行发生在C编程语言中.

Ale*_*ler 8

它是未定义的行为,因为它被var修改了几次而没有中间的序列点.序列点可以是例如a ;.但是,参数列表中的逗号不会引入序列点,也不会定义操作数的计算顺序(可以说,代码是双重未定义的......).

  • 评估操作数的顺序不是未定义的,它是未指定的(有一个评估顺序,实现不必记录它也不一致 - 即使在同一代码行的两次执行之间). (4认同)