浅析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的进度。希望大家在项目的开发过程中引起注意。

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