Будет ли выполнено 2-е условное в ИЛИ, если 1-е условное пройдет? - PullRequest
0 голосов
/ 27 июля 2011

Например:

if(pos == -1 || character_array[pos] == 0) {

}

Если pos равно -1, могу ли я рассчитывать на это НИКОГДА не падать?

То же самое относится и к операторам AND, в которых первое условное условие не выполняется.

Ответы [ 3 ]

4 голосов
/ 27 июля 2011

C поддерживает оценку короткого замыкания с логическими операторами || и &&, поэтому в вашем случае это должно работать так, как вы описываете, то есть не сбой.

2 голосов
/ 27 июля 2011

Да, вы можете на это рассчитывать.Соответствующие части стандарта C: 6.5.13:

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

и 6.5.14:

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

Например, следующее является идиоматическим C:

if (foo && foo->bar > 10)
2 голосов
/ 27 июля 2011

Это зависит от языка, но большинство языков будет игнорировать остальную часть оператора, если первая часть верна для ||.

Аналогично, большинство языков будет игнорировать остальную часть оператора, если часть&& ложно.

Если вы хотите, чтобы все выполнялось, используйте вместо этого одиночные операторы | и &.

...