d if 语句 d.a 布尔变量与零值比较 不可将布尔变量直接与TRUE、FALSE 或者1、0 进行比较。 根据布尔类型的语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE的值究竟是什么并没有统一的标准。例如Visual C++将TRUE 定义为1,而Visual Basic 则将TRUE 定义为-1。 例:假设布尔变量名字为flag,它与零值比较的标准if 语句如下: if (flag) // 表示flag为真时满足条件 if (!flag) // 表示flag为假时满足条件 其它的用法都属于不良风格,例如: if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0) d.b 整型变量与零值比较 应当将整型变量用“==”或“!=”直接与0比较。 例:假设整型变量为value,它与零值比较的标准if 语句如下: if (value == 0) if (value != 0) 不可模仿布尔变量的风格而写成 if (value) // 会让人误解 value 是布尔变量 if (!value) 小技巧:想必大家都有过将赋值操作符“=”当作比较相等操作符“==”用过,这个错误比较的隐晦,不易排查,而且编译器从不把这类事情当作是程序员犯下的错。避免的方法有两种,一种是养成良好的编程习惯,在比较数值时小心翼翼的处理;另一种方法见下面给出的代码: if (NULL = = p) { …… } 是不是觉得这种书写方式很古怪?不是程序写错了? 当然不是! 有经验的程序员为了防止将 if (p = = NULL) 误写成 if (p = NULL),而有意把p 和NULL 颠倒。编译器认为 if (p = NULL) 是合法的,但是会指出 if (NULL = p)是错误的,因为NULL不能被赋值。所以,再次遇到判断整型变量是否与某个数相等时,请这样写吧: if(2==flag) { …… } d.c 浮点变量与零值比较 不可将浮点变量用“==”或“!=”与任何数字比较。 千万要留意,无论float 还是double 类型变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。 假设浮点变量的名字为x,应当将 if (x == 0.0) // 隐含错误的比较 转化为 if ((x>=-EPSINON) && (x<=EPSINON)) //EPSINON 是精度
|