第四章 表达式与语句

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语句

跳出多重循环体中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,138评论 0 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,605评论 18 399
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,776评论 0 38
  • 1> 事件处理简介 3大事件:(主要)触摸事件、加速计事件、远程控制事件。 什么是响应者对象- 在iOS中不是任何...
    一个人的思考阅读 175评论 0 0
  • 第1种爱情,你爱着她,她也爱着你。 第2种爱情,你爱着她,但她已经不爱你了。 第3种爱情,你不再爱她了,她也不再爱...
    吃饱了睡阅读 594评论 4 3