Pan*_*ato 6 c pre-increment post-increment
#include <stdio.h>
int main()
{
int a = 10;
if (a == a--)
printf("TRUE 1\t");
a = 10;
if (a == --a)
printf("TRUE 2\t");
}
Run Code Online (Sandbox Code Playgroud)
为什么第二个if语句是真的?
输出为:TRUE 1 TRUE 2
这是否由于未定义的行为而发生,因为我将相同的变量与其递减的值进行比较?
das*_*ght 12
正确,条件评估为true因为您看到未定义的行为:如果在表达式中使用具有副作用的运算符的变量,则在没有序列点的表达式中再次使用相同的变量是非法的(==没有序列点).
这是因为编译器可以随意应用--它所希望的任何时间的副作用,只要在计算表达式时使用的值是正确的(即后缀表示法减少之前的值,或者后面的值)递减前缀表示法).