最近代碼review的時候發現一個同事的一個bug,他把條件判斷寫成if (speed = HIGH_SPEED),這樣會導致什麼問題呢?
我們貼個錯誤代碼分析看看:
#include <stdio.h>
#define HIGH_SPEED 120
int main(void)
{
int speed;
if (speed == HIGH_SPEED)
{
/*邏輯語句塊一*/
}
else
{
/*邏輯語句塊二*/
}
return 0;
}
以上的代碼,本來的策略邏輯是如果條件speed等於HIGH_SPEED成立執行邏輯語句塊一,否則執行邏輯語句塊二。但是如果寫代碼時把條件判斷語句誤寫成if (speed = HIGH_SPEED)時,雖然編譯不會報錯(因爲C語言會認爲這個賦值語句是對的)。但是代碼只會執行邏輯語句塊一,邏輯語句塊二的代碼永遠執行不到。如果在幾個人合作開發的大型項目,這樣的問題往往不好發現,會導致查找追蹤問題耽誤很多時間。
那麼怎麼解決這個因不小心導致的問題呢?其實很簡單,只要把常量寫在“==”前面,如if (HIGH_SPEED == speed)就可以避免這個bug了。因爲假設你由於粗心誤寫成if (HIGH_SPEED = speed),編譯器會給出報錯提示,而不會像speed = HIGH_SPEED(編譯器認爲這是個合法的賦值語句)。雖然if (speed == HIGH_SPEED)能得到功能預期的結果,但是還是推薦使用if (HIGH_SPEED == speed)的寫法。
#include <stdio.h>
#define HIGH_SPEED 120
int main(void)
{
int speed;
if (HIGH_SPEED == speed)
{
/*邏輯語句塊一*/
}
else
{
/*邏輯語句塊二*/
}
return 0;
}
雖然這只是一個小問題,但是體現了代碼設計需要注意思維邏輯的嚴謹性。這樣纔會寫出健壯的程序,避免出現一些粗心引起的bug,從而耽誤項目的release的進度。希望大家在項目的開發過程中引起注意。