15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺序运算
运算符优先级表的出处
运算符不难记,优先级和结合性才是比较难记的!
所以建议:如果代码行中的运算符比较多,用括号确定表达式的操作顺序比较好。能避免使用默认的优先级,尤其在忘记优先级的情况下。
if语句(与零值比较)
布尔变量与零值比较:
不可将布尔变量直接与TRUE、FALSE或1、0进行比较
正确做法如下:
[cpp]
if(flag)//表示flag为真
if(!flag)//表示flag为假
//下面的属于不良风格
if(flag==TRUE)
if(flag==FALSE)
if(flag==1)
if(flag==0)
整型变量与零值比较:
应当将整型变量用"=="或"!="直接与0比较
正确做法如下:
[cpp]
if(value==0)
if(value!=0)
//以下的写法会让人误解为布尔变量
if(value)
if(!value)
浮点变量与零值比较:
不可将浮点变量用"=="或"!="与任何数字比较
因为浮点类型具有精度限制,所以应该设法转化为">="或"<="形式
所以应该将
[cpp]
if(x==0.0)
转化为
[cpp]
if((x>=-EPSINON)&&(x<=EPSINON))//其中EPSINON是允许的误差(即精度)
指针变量与零值比较:
应将指针变量用"=="或"!="与NULL比较
尽管NULL的值与0相同,但是两者意义不同。
[cpp]viewplaincopyprint
if(p==NULL)
if(p!=NULL)
//以下写法让人误解是整型变量
if(p==0)
if(p!=0)
//以下写法让人误解是布尔变量
if(p)
if(!p)
有时候可能会看到if(NULL==p)这种比较古怪的格式,这并不是程序写错了,而是程序员为了防止将if(p==NULL)误写成if(p=NULL)。编译器认为if(p=NULL)是合法的,但会指出if(NULL=p)是错误的,因为其不能被赋值。
循环语句的效率
建议:
在多重循环中,如果有可能,我们应该尽力将最长循环放在最内层,最短放在最外层。以减少CPU跨切循环层的次数
如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面
不可在for循环体内修改循环变量,防止for循环失去控制
建议for语句的循环控制变量的取值采用"半开半闭区间"写法
switch语句
每个case语句的结尾都须加上break,除非有意使多个分支重叠
不要忘记最后那个default分支,即使程序不需要,也须保留。因为这是为了防止别人误以为你忘了default处理www.2cto.com
goto语句
虽然goto会破坏结构化设计风格。它可能会跳过了某些对象的构造、变量的初始化、重要的计算等语句而造成错误或隐患。也因此goto通常不被推荐使用。但其的一个作用是不能忽略的:就是从多重循环一下子就能跳到循环外,不需要多个break语句。