淺析if (ConstantValue == Variable)的重要性

        最近代碼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的進度。希望大家在項目的開發過程中引起注意。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章