一直以来,各种介绍C/C++的书中都告诫我们在条件语句中,判断两个值是否相等时,把常量写在等号的左边,这是一种好的编程习惯。道理比较简单,因为你很可能因为输入错误把“==”写成了“=”,这样条件语句很可能得不到你预期的值,程序也就无法按正常逻辑运行了。比如:
if( a == 3 )
{
执行A计划;
}
else
执行B计划;
如果你写成下面这样的:
if( a = 3 )
{
执行A计划;
}
else
执行B计划;
那么你的B计划永远别想执行了。因为条件语句的值为3,永远为真(非0)。编译器通常也不把这种写法视为错误,不会有任何提示。
如果你把条件写成(3 == a )时,即使你少写了一个等号(3 = a ),编译器也会帮你发现错误,因为C++中常量是不能作为左值的。
这个道理我很早就明白,可自己在写的时候很少想到写成这样的。因为大一学C++时,养成了把常量写在右边的习惯了。这几天抽一部分时间在补Win Socket编程,其实以前做一个课程设计时写过的,但那已经是long long ago 了。今天在写一个UDP通信的小程序时,一个小BUG让我足足找了3个小时才找到。我发现了把常量写在“==”左边的另一个好处!
我在客户端写了这么一段:
if (int ret = sendto(s,"hi,I'm Client",strlen("hi,I'm Client")+1,0,(SOCKADDR *)&recvAddr,sizeof(recvAddr) != SOCKET_ERROR))
{
cout<<"发送成功"<<endl;
}
于是服务器端怎么也收不到数据,客户端还一直告诉我,“发送成功”,于是这样,我的注意力被吸引到服务器端,三个小时就浪费了!最终才发现,原来我把!= SOCKET_ERROR写到sendto函数的括号里面了,最后一个参数我传入的是sizeof(recvAddr) != SOCKET_ERROR。
看来,好的编程习惯不是看书看出来的,也不是写代码出来的,而是写的过程中不断地改出来的!看来以后随时都得注意纠正自己编程中的不良习惯了!今天的午休时间又严重拖延了!