重读金典------高质量C编程指南(林锐)-------第四章 表达式和基本语句
4.1 运算符的优先级

规则:如果代码行中的运算符比较多,可用括号确定操作顺序。if((a|b)&&(a&c))
4.2 复合表达式
规则:不要编写太复杂的复合表达式
规则:不要有多用途的复合表达式 d = (a = b + c) + r ; 不可取。
规则:不要把程序中的复合表达式与真正的数学表达式相混淆
4.3 if语句
本节以“与零值比较”为例,展开分析。
1)布尔变量与零值比较
规则:不可将布尔变量直接与TRUR、FALSE、或者1 、 0 进行比较。
if(flag) //表示flag 为真
if(!flag) //表示flag为假
2)整型变量与零值比较
规则:用== 和 !=直接与0 比较。
if (value == 0)
if (value != 0)
3) 浮点变量与零值比较
规则:不可将浮点变量用 == 或 != 与任何数进行比较。而要注意浮点型变量都是有精度的。应该设法转化为 >= 或者 <=
将 if (x == 0.0)改为 if ((x>=-eps) && (x<=eps))
4)指针变量与零值比较
规则:应该将指针变量用 == !=与NULL进行比较。
指针变量的零值为 空 。尽管NULL的值与0相同,但两者意义不同。
if(p == NULL) 或者 if (p != NULL)
5)补充说明
有些程序中这样写 if (NULL == P) 这是为了防止用户这么写if (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.5 for 语句的循环控制变量
规则:采用半开半闭区间的写法
for (int x=0; x<n; x++)
4.6 switch语句
首先,switch语句是多分支语句。基本格式如下:
switch(variable)
{
case value1: ;break;
case value2: ;break;
case value3: ;break;
default: ;break;
}
规则:每个case分支后面,不要忘了加break,且最后还有default分支。
重读金典------高质量C编程指南(林锐)-------第四章 表达式和基本语句的更多相关文章
- 重读金典------高质量C编程指南(林锐)-------第七章 内存管理
2015/12/10补充: 当我们需要给一个数组返回所赋的值的时候,我们需要传入指针的指针.当我们只需要一个值的时候,传入指针即可,或者引用也可以. 结构大致如下: char* p = (char*) ...
- 重读金典------高质量C编程指南(林锐)-------第一章 文件结构
第一章 文件结构 C/C++程序通常由两个文件组成,一个文件保存程序的声明,称为头文件,.h 文件.一个保存程序的实现,称为定义文件.c文件. 1.1 版权与版本的声明 版权和版本的声明 ...
- 重读金典------高质量C编程指南(林锐)-------第六章 函数设计
函数设计最重要的无外乎两个方面,一个是函数的接口设计一个是内部实现的一些规则. 在C语言中,函数的参数和返回值的传递方式分为两种: 值传递与指针传递.而C++中,多了一个引用传递. 引用传递有些像指针 ...
- 重读金典------高质量C编程指南(林锐)-------第五章 常量
5.1 为什么需要常量 1)为了便于用户理解,增加程序的可读性. 2)在程序的很多地方都用到同一个常量,用某一个宏常量来定义可以减少错误. 规则:尽可能的使用含义直观明确的常量来表示程序中多次出现的 ...
- 重读金典------高质量C编程指南(林锐)-------第三章 命名规则
3.1 共性规则 规则:标识符应该直观且可以拼读,可进行英语翻译. 规则:标识符的长度需要控制好,不应该太长. 规则:命名规则应该同操作系统或者开发工具等保持一致,比如大小写混用.AddChar ...
- 重读金典------高质量C编程指南(林锐)-------第二章 程序的板式
2.1 空行 规则1:在每个类声明之后,每个函数定义结束之后加空行. 规则2:在某个函数体内,相关的不加空行,不相关的加空行. // 空行 void Function1(-) { - } // 空行 ...
- 安卓权威编程指南-笔记(第27章 broadcast intent)
本章需求:首先,让应用轮询新结果并在有所发现时及时通知用户,即使用户重启设备后还没有打开过应用.其次,保证用户在使用应用时不出现新结果通知. 1. 一般intent和broadcast intent ...
- 安卓权威编程指南-笔记(第21章 XML drawable)
在Andorid的世界里,凡事要在屏幕上绘制的东西都可以叫drawable,比如抽象图形,Drawable的子类,位图图形等,我们之前用来封装图片的BitmapDrawable就是一种drawable ...
- C# 《编写高质量代码改善建议》整理&笔记 --(四)资源管理&序列化
1.显示释放资源需继承接口IDisposable 什么是资源:C#中每一个类型都代表一种资源,而资源又分为以下两类. 托管资源:由CLR管理分配和释放的资源,即从CLR里new出来的对象. 非托管资源 ...
随机推荐
- HDU 3395 Special Fish(拆点+最大费用最大流)
Special Fish Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- Jerasure 1.2A 中的 C 函数 tips
C stat函数的用法举例 C语言 fread()与fwrite()函数说明与示例 / C 库函数 - fwrite() C 库函数 - sprintf()
- vmware虚拟机无法ping通主机,也无法联网
- 问题:viewController不会调用dealloc()不会销毁
问题 在调试程序时,我从ViewController A push进 ViewController B,在从B back时发现程序不会执行B里面的dealloc(),很诡异的问题,因为按理说此时点击b ...
- mysql启动错误1067的解决
安装后MYSQL5后,发现启动出错,有时启动正常,但加接时马上出错. 出错代码:1067 解决办法如下: 删除%windows%/my.ini 删除其它地方的my.ini 在mysql安装 ...
- linux下终端录制
主要是以下三步: 一.安装软件:curl -sL https://asciinema.org/install | sh 二.录制终端:asciinema rec filename 三.回放终端:asc ...
- 多线程设计模式 : Master-Worker模式
Master-Worker是常用的并行计算模式.它的核心思想是系统由两类进程协作工作:Master进程和Worker进程.Master负责接收和分配任务,Worker负责处理子任务.当各个Worker ...
- javascript 动态添加城市
匿名函数的使用 createTextnode 创建文本 createElement 创建元素 appendChild 将文本或元素追加 <!DOCTYPE html> < ...
- hexo添加百度统计
litten的主题yilia 编辑文件 themes/yilia/_config.yml,添加一行配置,可以删除原来的google analytics baidu_tongji: true 新建 th ...
- iOS地图多个自定义大头针绘制核心代码
首先需要自定义一个包含经纬度,title,subtitle的数据模型 #import <Foundation/Foundation.h> #import <MapKit/MapKit ...