Каково поведение множественных неразделенных сравнений на равенство в C? - PullRequest
0 голосов
/ 28 апреля 2018

Я сделал опечатку, когда писал какой-то код C, и заметил, что CLion не видит ничего плохого в выполнении

while(line != NULL != 0)

На самом деле, он на самом деле компилируется и работает без ошибок (хотя всегда возвращает true)

Я провел дополнительное тестирование и обнаружил, что иногда оно действительно возвращает false

//true
if(1 != 0 == 1)
//false
if(1 != 0 == 0)
//true
if(1 != 0 > 2)

Сначала я подумал, что по сути дела

if((1!=0) == true)

но эта последняя проверка полностью потеряла меня.

1 Ответ

0 голосов
/ 28 апреля 2018

Они оцениваются с помощью правильного порядка операций, и помните, false оценивает до 0 и true до 1

!= и == имеют одинаковый приоритет, оценка слева направо

> имеет больший приоритет, чем !=, сначала оцените его

//true
if(1 != 0 == 1)  => if ((1 != 0) == 1)  => if (1 == 1)  => true

//false
if(1 != 0 == 0)  => if ((1 != 0) == 0)  => if (1 == 0)  => false

//true
if(1 != 0 > 2)  => if (1 != (0 > 2))  => if (1 != 0)  =>  true

http://en.cppreference.com/w/c/language/operator_precedence

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...