2016-11-25 58 views
2

假設我在C中有以下循環:while(x1 & & x2)。 如果第一個條件爲假(x1 == 0),那麼while循環會檢查第二個條件嗎?While while循環檢查每個條件嗎?

+2

這有什麼做用'while'(只有一個條件)的一切與'做'&&。 – melpomene

+1

這是基礎,它涵蓋在任何基本的C教科書中。正如@melpomene指出的那樣,它與'while'無關。我建議你通過閱讀這樣一本書來正確地學習語言,而不是在這裏提出零星的問題。 –

回答

3

如果第一條件爲假(X1 == 0)然後將while循環檢查第二個條件?

不會的。它們被稱爲short circuit evaluation

C11, 6.5.13

不同的是按位二進制&運算符,& &運營商保證 左到右的評價;如果第二個操作數被評估,則在第一個和第二個操作數的評估之間存在一個序列點。如果第一個操作數等於0,則不計算第二個操作數 。


同樣在cond1 || cond2,如果cond1計算結果爲真正然後cond2將不進行評估。請參閱:C11, 6.5.14

與按位|運算符||運營商保證 從左到右評估;如果第二個操作數被評估,則在第一個和第二個操作數的評估之間存在一個序列點。如果第一個操作數不等於0,則不會評估第二個操作數 。

0

不,如果第一個條件是錯誤的,它會直接停在那裏。
如果你想檢查諸如if (arrayLength < 10 && array[15] == 'c')之類的東西,假設arrayLength是數組的長度,那麼你可以避免像分段錯誤那樣的錯誤。

0

C執行短路評估。如果x1是錯誤的,那麼整個表達式就不可能是真的,所以x2永遠不會被評估。

1

如果第一個條件評估爲false,則第二個條件由標準而不是保證進行評估。

C standard第6.5.13:

不同於按位二進制&運算符,操作者&&保證左到右的評價;如果第二操作數是 求值,則在第一和第二操作數的評估 之間存在序列點。 如果第一個操作數 的值等於0,則不計算第二個操作數。