第四章 表达式与语句

4.1 运算符的优先级

B56AE4A8A8854692A95364AA3764AA5C.jpg

规则4-1-1 如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。

4.2 复合表达式

规则4-2-1 不要编写太复杂的复合表达式。

规则4-2-2 不要有多用途的复合表达式。

规则4-2-3 不要把程序中的复合表达式与“真正的数学表达式”混淆。

4.3 if 语句

4.3.1 布尔变量与零值比较

规则4-3-1不可将布尔变量直接与TRUE、FALSE或者1、0进行比较。

假设布尔变量名字为flag,它与零值比较的标准if语句如下:

    if (flag)    // 表示flag为真
    if (!flag)    // 表示flag为假    

注:TRUE的值究竟是什么并没有统一的标准。根据布尔类型的定义,零值为“假”(记为 FALSE),任何非零值都是“真”(记为TRUE)。

4.3.2 整型变量与零值比较

规则4-3-2应当将整型变量用“==”或“!=”直接与 0 比较。

if (value == 0)

4.3.3 浮点变量与零值比较

规则4-3-3不可将浮点变量用“==”或“!=”与任何数字比较。

if ((x >= -EPSION) && (x <= EPSION))    // 其中EPSION是允许的误差(即精度)。

4.3.4 指针变量与零值比较

规则4-3-4应当将指针变量用“==”或“!=”与 NULL 比较。

4.3.5 对 if语句的补充说明

将if (p == NULL)误写成if (p = NULL),而有意把p和NULL颠倒。编译器认为if (p = NULL)是合法的,但是会指出if (NULL = p)是错误的,因为NULL不能被赋值。

程序中有时会遇到 if/else/return 的组合,应该将如下不良风格的程序

if (condition) 
    return x; 

return y; 

改写为

if (condition)
{ 
    return x;
} 
else 
{
    return y; 
} 

或者改写成更加简练的

return (condition ? x : y); 

4.4 循环语句的效率

提高循环体效率的基本办法是降低循环体的复杂性。 

建议4-4-1 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少 CPU 跨切循环层的次数。

建议4-4-2 如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。示例 4-4(c)的程序比示例 4-4(d)多执行了 N-1 次逻辑判断。并且由于前者老要进行逻辑判断,打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。如果 N 非常大,最好采用示例 4-4(d)的写法,可以提高效率。如果 N 非常小,两者效率差别并不明显,采用示例 4-4(c)的写法比较好,因为程序更加简洁。

B445E54215CD401B93E4CA6EB28E8301.jpg

4.5 for 语句的循环控制变量

规则4-5-1不可在for 循环体内修改循环变量,防止for 循环失去控制。

建议4-5-1 建议 for 语句的循环控制变量的取值采用“半开半闭区间”写法。

4.6 switch语句

switch是多分支选择语句。

规则4-6-1 每个 case 语句的结尾不要忘了加 break,否则将导致多个分支重叠(除非有意使多个分支重叠)。

规则4-6-2 不要忘记最后那个 default 分支。即使程序真的不需要 default 处理,也应该保留语句 default : break; 这样做并非多此一举,而是为了防止别人误以为你忘了 default 处理。

4.7 goto语句

跳出多重循环体中。

你可能感兴趣的:(第四章 表达式与语句)