if ( x == 0 ) 和 if ( 0 == x ) 的差異
今天找到一本很不錯的書
C Programming FAQs: Frequently Asked Questions
看到其中一個問題,覺得很有意思,就把它記錄下來。
為什麼有人要寫 if ( 0 == x ) 而不是 if ( x == 0 )?
就程式語法上來看,這兩個是完全等義的,
而從一般人解讀的理解來說,if ( x == 0 ) 又比較好理解,
那位甚麼會有人故意寫成 if ( 0 == x )呢?
答案是:「防呆」
基本上寫程式的人大概都會犯上一個錯誤,== 和 = 的誤用。
新手可能是稿不清楚狀況,老手則可能是不小心犯下了這個錯誤(寫字都會有筆誤了)。
這個 Bug 是很難找出來的,因為對 Compiler 來說, x = 0 仍然可以當作判斷條件,
而且是成立的條件式。
這代表在測試的情況下非常有可能測不出來!!
可是如果寫成 if ( 0 == x ),當不小心寫錯的時候, if ( 0 = x )是可以被判斷出來的,
以 gcc 來說,錯誤信息如下:
Error: lvalue required as left operand of assignment
這樣程式設計師就可以很容易的發現這個問題而加以修正。
看來也許我要開始改變自己的寫法了~
C Programming FAQs: Frequently Asked Questions
看到其中一個問題,覺得很有意思,就把它記錄下來。
為什麼有人要寫 if ( 0 == x ) 而不是 if ( x == 0 )?
就程式語法上來看,這兩個是完全等義的,
而從一般人解讀的理解來說,if ( x == 0 ) 又比較好理解,
那位甚麼會有人故意寫成 if ( 0 == x )呢?
答案是:「防呆」
基本上寫程式的人大概都會犯上一個錯誤,== 和 = 的誤用。
新手可能是稿不清楚狀況,老手則可能是不小心犯下了這個錯誤(寫字都會有筆誤了)。
這個 Bug 是很難找出來的,因為對 Compiler 來說, x = 0 仍然可以當作判斷條件,
而且是成立的條件式。
這代表在測試的情況下非常有可能測不出來!!
可是如果寫成 if ( 0 == x ),當不小心寫錯的時候, if ( 0 = x )是可以被判斷出來的,
以 gcc 來說,錯誤信息如下:
Error: lvalue required as left operand of assignment
這樣程式設計師就可以很容易的發現這個問題而加以修正。
看來也許我要開始改變自己的寫法了~
留言
張貼留言