В чем разница между if (a == (1,2)) и if (a == 1,2)? - PullRequest
0 голосов
/ 17 февраля 2020

В чем разница между 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;
}

Ответы [ 2 ]

4 голосов
/ 17 февраля 2020

a == 1,2 эквивалентно (a == 1),2 из-за приоритета оператора

И из-за того, как оператор запятой работает, (a == 1),2 приведет к 2. И a == (1,2) будет таким же, как a == 2.

Таким образом, в действительности ваши два условия будут похожи на

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

Первое условие будет истинным, только если a равно 2. Второе условие всегда будет истинным (только ноль - ложь).

2 голосов
/ 17 февраля 2020

В обоих условиях операторов if используется оператор запятой

Второе условие эквивалентно может быть переписано как

if( ( a == 1 ), 2)

Значением оператора запятой является значение второго операнда. Таким образом, условие во втором операторе if всегда будет иметь значение true, потому что 2 не равно 0.

Условие в первом операторе if может быть переписано как

if(a == 2)

, потому что первый выражение (целочисленная константа 1) оператора запятой не имеет никакого эффекта.

Таким образом, условие оператора if оценивается как истинное, только когда a равно 2.

...