if(a == (1,2)) 和 if(a == 1,2) 有什么区别?

What is the difference between if(a == (1,2)) and if(a == 1,2)?

if(a == (1,2))if(a == 1,2) 有什么区别?

#include<stdio.h>
int main()
{
  int a = 2;
  if(a == (1,2))
    printf("Hello");
  if(a == 1,2)
    printf("World");

  return 0;
}

在 if 语句的两个条件中都使用了逗号运算符

第二个条件等价地可以改写成

if( ( a == 1 ), 2)

逗号运算符的值是第二个操作数的值。所以第二个 if 语句中的条件将始终计算为真,因为 2 不等于 0.

第一个if语句中的条件可以改写成

if(a == 2)

因为逗号运算符的第一个表达式(整型常量 1)没有作用。

因此只有当 a 等于 2 时,if 语句的条件才为真。

由于 operator precedence

a == 1,2 等同于 (a == 1),2

并且由于 the comma operator 的工作原理,(a == 1),2 将导致 2a == (1,2) 将与 a == 2 相同。

所以实际上你的两个条件就像

if (a == 2)
    printf("Hello");
if(2)
    printf("World");

只有当 a 等于 2 时,第一个条件才成立。第二个条件总是为真(只有零为假)。