if-else语句需注意的一些问题。
1 在判断语句中判断整形变量是否等于一个常量if(i == 0)的写法不如if( 0 == i).
因为前者如果粗心少写了一个等号,语句也是对的,只是不是我们期望的。里面就变成一条赋值语句,如果i不是只读变量,那么赋值就会成功,那么不论i是否为0,if中的语句都会被执行,而且我们也不能马上发现这错误。对后者而言,如果少写了一个等号,语法就有问题了,编译的时候就会报错,这时很容易就能发现问题出现在哪里。这种写法相对安全点。
2 如果if后面的语句只有一条,为了方便,我们经常就不写大括号。虽然这样写并没有什么错误,不过很容易引起误会。
例如:
#include "stdio.h"
int main()
{
int x=10, y=20, t=0;
if (x==y) t=x; x=y; y=t;
printf("%d,%d\n",x,y);
return 0;
}
这是做基础测试时碰到的一道题,虽然很简单,不过对新手而言,这里是很容易出错的。就是因为在if后面没加大括号引起的误会。在if后面加上大括号还有一个好处,就是在程序后期的维护阶段可以往if语句里再添加多条语句而不会产生歧义。
3 当一个函数中出现多个if和else时,else到底和哪个if配对呢?
这个问题对于老手来说可以很容易地区分出来,但对我们新手来说就很容易犯糊涂了。碰到这样的情况,坚持一条原则:else始终与同一个括号内最近未匹配的if语句结合。
4 if语句后面的分号。关于if-else语句的一个容易出错的地方就是与空语句连用。
如:
if(NULL != p);
f();
这种情况下,无论NULL是否为空,f()都会被执行,而且这样写编译时还不会报错。有时候粗心就容易在if后面加了分号。
5 先处理正常情况,然后再处理异常情况。
if语句总是需要做判断,而正常情况一般比异常情况发生的概率更大,如果把执行概率更大的代码放到后面,也就意味着if语句将进行多次无谓的比较。另外,非常重要的一点是,把正常情况的处理放在if后面,而不要放在else后面。这也符合把正常情况的处理放在前面的要求。
|
|