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