2012-09-22 56 views

回答

7

這是合法的,但可能不符合你的期望。它被視爲你寫如下:

if (((0 <= x) <= y) <= y+1) 

(0 <= x)評估爲0或1;將0或1與y進行比較,產生另一個0或1的結果;這與y+1進行比較,產生用於控制if語句的最終0或1。

如果你的目標是要確保x不小於零或大於y大,而且也保證了y不大於y+1更大,那麼你會寫:

if (0 <= x && x <= y && y <= y+1) 

我注意到, y <= y+1通常是真的。如果y是一個無符號類型並且等於該類型的最大值,則y+1爲0.如果y是一個有符號類型並且等於該類型的最大值,則通過給它添加1來調用未定義的行爲。如果幸運的話,y+1將包裝爲簽名類型的最大負值,但不能依賴於該值(所以也許這會讓它「如果你不幸」,因爲該錯誤不一定會顯示出來在它導致重大問題之前)。

+0

好的,謝謝!是的,我不認爲這就是我想要的...... – spatara

+0

如果某種語言有語法來做到這一點,它肯定會很好...... – Linuxios

+0

@Linuxios我不認爲這種類型的語法在更多現代語言。例如,Python可以很好地處理它。 –

1

不是,儘管它是合法的C代碼,但是根本不可能做你想做的事。您必須使用& &或||。原因是你實際上看到,例如,y是大於還是等於布爾值,在C和C++中通常只是0和1.

+0

從語法合法的意義上說它是「可能的」。不過,這可能不是想要的。 –

+0

@jonathan:是的,我可以說更好....我會解決它。 – Linuxios

3

這是合法的(並且已定義; Google搜索字詞'operator precedence'),但我認爲它不會達到您期望的或意義上的效果。

1

這是完全合法的,但實際上沒用。您應該使用&&和/或||來建立正確的表達式。