C编译器如何理解if-else语句中编写的以下关系表达式?

How the following relational expression written in if-else statement is understood by the C Compiler?

我不明白为什么这段代码输出的是 20 30 40。谁能解释一下写在if语句中的关系表达式是如何被C编译器理解的?

This is the image of code of the C Program

#include <stdio.h>

int main()
{
   int i = 20, j = 30, k = 40;
   if (i > j == k)
   {
       printf("%d %d %d ",--i,j++,++k);
   }
   else
   {
       printf("%d %d %d ",i,j,k );
   }

   return 0;
}

输出:

20 30 40

根据operator precedence i > j == k执行为(i > j) == k

所以先执行i > j,返回一个布尔值(这里是false,即0) 结果与 k 比较,不等于 0。条件不为假,所以 else 部分条件被执行

首先要考虑的是运算符优先级。运算符 > 在运算符 == 之前进行评估,它 returns 是一个值。在这种情况下,i > j 是错误的,因此它 returns 为零。然后它检查零是否等于 k,即 40 而不是。所以它转到其他分支。