Операторы "И" и "Или" в условных выражениях в C

Я всегда думал о чем-то и не мог найти ответ где-нибудь еще. Если у меня есть этот кусок кода:

if ((cond1) &&(cond2) && (cond 3) && (cond 4))
 {
       // do something
 }

Допустим, первое условие ложно, тогда моя программа будет проверять и другие условия, или просто пропустить их проверку?

Но если у меня есть

if ((cond1) ||(cond2) || (cond 3) || (cond 4))
 {
       // do something
 }

и cond 1 - true, будет ли моя программа работать сразу после выполнения части if или продолжить проверку других условий?

2 ответа

Решение

Квотирование C11 стандарт, глава §6.5.13, Логический оператор И (выделено мной)

В отличие от побитового двоичного & оператор, && оператор гарантирует оценку слева направо; если вычисляется второй операнд, между оценками первого и второго операндов существует точка последовательности. Если первый операнд сравнивается равным 0, второй операнд не оценивается.

Таким образом, если первое условие (операнд LHS) оценивается как ложное, более поздние условия, то есть операнд RHS && не оценивается.

Точно так же (какни странно) для логического оператора "ИЛИ",

В отличие от побитового | оператор, || оператор гарантирует оценку слева направо; если вычисляется второй операнд, между оценками первого и второго операндов существует точка последовательности. Если первый операнд сравнивается не равным 0, второй операнд не оценивается.

В C и && и || "схема сортировки", означающая, что если оценки левого операнда достаточно для определения результата, то правый операнд не оценивается.

Другие вопросы по тегам