Разница между «или» логики в с - PullRequest
0 голосов
/ 09 августа 2011

В Linux, используя gcc, когда я пишу цикл, подобный этому

while(1 || 0)

Он входит в цикл, но когда я пишу цикл, как это

while(0 || 1)

не входит в цикл. В чем разница?

Ответы [ 5 ]

2 голосов
/ 09 августа 2011

Нет никакой разницы. Выполнение должно войти в цикл в обоих выражениях.

1 голос
/ 09 августа 2011

Или вы можете печатать как

while(0||1);

Не поможет, если вы положите;после того, как время цикла

0 голосов
/ 29 сентября 2011

оба фрагмента кода имеют одинаковое поведение. В обоих случаях условие будет истинным и вернет поведение бесконечного цикла.

0 голосов
/ 09 августа 2011

В обоих случаях он запускает бесконечный цикл ... его прекрасно работает ... между ними нет никакой разницы ...

я думаю, что вы ставите;в конце второго цикла while .. удалите его и посмотрите

0 голосов
/ 09 августа 2011

Здесь нет никакой разницы. В этом случае. Вы делаете что-то еще не так.


Но на самом деле есть разница - в C / C ++ есть Оценка короткого замыкания . Так что, поскольку это не ваш настоящий код, это может вам помочь.

Например, если у вас есть

while( f() || g() )
// ..

, если f() return true, g() никогда не будет выполнено, поскольку выражение будет немедленно оценено как true. То же самое для &&:

while( f() && g() )
// ..

если f() return false, g() никогда не будет выполнено, потому что значение выражения точно будет false (независимо от того, что g() вернет здесь.

Хорошо, если f() вернет true (для последнего примера), g() будет выполнено , чтобы вычислить значение выражения. То же самое с ||, но если f() вернет false.

...