C 对包含前缀和后缀运算符的printf()感到困惑

C 对包含前缀和后缀运算符的printf()感到困惑,c,programming-languages,C,Programming Languages,如果int var=20,那么如何计算 printf("%d %d %d", var--, ++var, --var); 执行是在C编程语言中进行的。这是未定义的行为,因为var被多次修改,中间没有一个序列点。例如,序列点是。但是,参数列表中的逗号不引入序列点,而且操作数的求值顺序也未定义(可以说,代码是双重未定义的…。这是未定义的行为,因为var在没有序列点的情况下被多次修改。例如,序列点是。但是,参数列表中的逗号不会引入序列点,而且操作数的求值顺序也未定义(可以说,代码是双重未定义的…)

如果int var=20,那么如何计算

printf("%d %d %d", var--, ++var, --var); 

执行是在C编程语言中进行的。

这是未定义的行为,因为
var
被多次修改,中间没有一个序列点。例如,序列点是
。但是,参数列表中的逗号不引入序列点,而且操作数的求值顺序也未定义(可以说,代码是双重未定义的…。

这是未定义的行为,因为
var
在没有序列点的情况下被多次修改。例如,序列点是
。但是,参数列表中的逗号不会引入序列点,而且操作数的求值顺序也未定义(可以说,代码是双重未定义的…)。

关于未定义行为,已经有很多非常类似的问题,例如,还有更多……关于未定义的行为,已经有很多非常类似的问题,例如,还有更多……操作数的求值顺序不是未定义的,而是未指定的(有一个评估顺序,实现不必记录它,也不可能是一致的——即使是在同一代码行的两次执行之间)。您可能需要考虑函数参数的序列正在被处理。操作数被评估的顺序不是未定义的,它是未指定的。(有一个评估顺序,实现不必记录它,也不必是一致的——即使在同一代码行的两次执行之间)。您可能需要考虑正在处理的函数参数序列。