2016-12-22 2 views
-2

Я всегда задумывался о чем-то и не мог найти ответа в другом месте. Если у меня есть этот кусок кода:Операторы «И» и «Или» в условных выражениях в C

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

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

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

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

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

+0

Google для «короткого замыкания» оценки – user3528438

+1

Что ваш C книги или любой интернет-ресурс, говорят о '||' и '' && операторов? Что неясно? – Olaf

+0

Да, если у вас есть 'false && ...' или 'true || ... 'остальное условие будет пропущено. Это называется [short circuiting] (https://en.wikipedia.org/wiki/Short-circuit_evaluation) – Arc676

ответ

4

Цитирование C11 стандарт, глава §6.5.13, логический оператор (курсив мой)

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

Так, если первое условие (LHS операнд) вычисляется в ложной, на более поздних условиях, то есть, РИТ операнд && является не оценены.

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

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

2

В C оба & & и || «sort-circuit», то есть если оценки левого операнда достаточно для определения результата, то правый операнд не оценивается.

Смежные вопросы