编写高质量代码:改善C程序代码的125个建议
02
2 保持严谨的程序设计,一切从表达式开 始做起
2 保持严谨的程序设计,一切从表达式开始做起
建议12:尽量减少 使用除法运算与求
模运算
建议13:保证除法和 求模运算不会导致除
零错误
建议14:适当地使 用位操作来提高计
算效率
建议15:避免 操作符混淆
建议16:表达式的 设计应该兼顾效率
建议2-4:禁止把 04 s i z e _ t 类 型 和 它 所 代
表的真实类型混用
建议2-5:小心使 05 用 无 符 号 类 型 带 来
的陷阱
建议2-3:使用rsize_t或 03 s i z e _ t 类 型 来 表 示 一 个 对
象所占用空间的整数值单位
建议2-6:防止无
06
符号整数回绕
1 数据,程序设计 之根本
建议2:防止整数类型产生回 绕与溢出
建议2-7:防止有符号整数 溢出
1 数据, 程序设计ttps:///
02
建议3-2:避免使 用浮点数进行精确
计算
04
建议3-4:避免直 接在浮点数中使用
“==”操作符做 相等判断
06
建议3-6:尽量将 浮点运算中的整数
转换为浮点数
01
建议3-1:了解 IEEE 754浮点数
03
建议3-3:使用分 数来精确表达浮点 数
05
建议3-5:避免使 用浮点数作为循环 计数器
1 数据,程序设计之根本
01
建议4-1:整数转换为新类型时必 须做范围检查
02
建议4-2:浮点数转换为新类型时 必须做范围检查
3 程序控制语句应该保持简洁高效
建议23:正确地使 用switch语句
建议24:选择合理的 case语句排序方法
建议25:尽量避免 使用goto语句
建议26:区别continue 与break语句
3 程序控制语句应该保持简洁高效
建议17-1:先处理正常情况,再处
1
理异常情况
建议17-2:避免“悬挂”的else
建议4:数据类型转换必须做 范围检查
1 数据,程序设计 之根本
建议6:使用typedef来定义 类型的新别名
01
建议6-1:掌握typedef的4种
应用形式
02
建议6-2:小心使用typedef带
来的陷阱
03
建议6-3:typedef不同于
#define
1 数据,程序设计之根本
01
建议7-1:尽量不要在一个声明中 声明超过一个的变量
建议5:使用有严格 定义的数据类型
B
D
F
1 数据,程序设计之根本
1
建议7:变量 声明应该力求
简洁
2
建议8:正确 地选择变量的
存储类型
3
建议9:尽量 不要在可重入 函数中使用静 态(或全局)
变量
4
建议10:尽量 少使用全局变
量
5
建议11:尽量 使用const声 明值不会改变
的变量
1 数据, 程序设计 之根本
2 保持严谨 的程序设计, 一切从表达 式开始做起
建议14:适当地使用位操作来 提高计算效率
https:///
01
02
建议14-1:尽量避免 对未知的有符号数执行
位操作
建议14-2:在右移中 合理地选择0或符号位
来填充空出的位
03
04
建议14-3:移位的数 量必须大于等于0且小
与可读性
2 保持严谨的程序设计,一切从表达式开始做起
建议12-1:用倒数相乘来实现除法
1
运算
建议12-2:使用牛顿迭代法求除数
的倒数
2
建议12-3:用减法运算来实现整数
建议12:尽量减少使用除法运
3
除法运算
算与求模运算
建议12-4:用移位运算实现乘除法
运算
4
建议12-5:尽量将浮点除法转化为
5
相应的整数除法运算
03
3 程序控制语句应该保持简洁高效
3 程序控制语句应该保持简洁高效
建议17:if语句应该尽量 保持简洁,减少嵌套的层
数
建议18:谨慎0值比较
建议22:谨慎使用 do/while与while循环
建议19:避免使用嵌套的 “?:”
建议21:适当地使用并行 代码来优化for循环
建议20:正确使用for循 环
编写高质量代码:改善C程序 代码的125个建议
演讲人
2 0 11 - 11 - 11
01
1 数据,程序设计之根本
1 数据,程序设计之根本
A
C
E
建议2:防止整数类 型产生回绕与溢出
建议4:数据类型转 换必须做范围检查
建议6:使用 typedef来定义类
型的新别名
建议1:认识 ANSI C
建议3:尽量少 使用浮点类型
02
建议7-2:避免在嵌套的代码块之 间使用相同的变量名
建议7:变量声明应该力求简 洁
A
C
建议8-2:慎用 extern声明外部变
量
建议8-1:定义局 部变量时应该省略
auto关键字
建议8-3:不要混 淆static变量的作
用
B
建议8-4:尽量少 使用register变量
D
1 数据,程序设计之根本
2
建议17:if语句应该尽量保持 简洁,减少嵌套的层数
建议17-3:避免在if/else语句后面
3
添加分号“;”
建议17-4:对深层嵌套的if语句进
行重构
4
建议18-1:避免布尔型与0或1进 行比较
建议18-2:整型变量应该直接与0 进行比较
建议18-3:避免浮点变量用“==” 或“!=”与0进行比较
“&&”混淆
2 保持严谨 的程序设计, 一切从表达 式开始做起
建议16:表达式的设计应该兼 顾效率与可读性
https:///
01
02
建议16-1:尽量 使用复合赋值运 算符
建议16-2:尽量 避免编写多用途 的、太复杂的复 合表达式
03
建议16-3:尽量 避免在表达式中 使用默认的优先 级
于操作数的位数
建议14-4:尽量避免 在同一个数据上执行位
操作与算术运算
2 保持严谨 的程序设计, 一切从表达 式开始做起
建议15:避免操作符混淆
https:///
01
建议15-1:避免“=”与“==”
混淆
02
建议15-2:避免“|”与“||”
混淆
03
建议15-3:避免“&”与
建议2:防止整数类 型产生回绕与溢出
https:///
01 02
06
03 05
04
建议2-1:char类型变量的值
01
应该限制在signed char与
unsigned char的交集范围
内
建议2-2:使用显式声明为 02 s i g n e d c h a r 或
unsigned char的类型来 执行算术运算
编写高质量代码改善C#程序的157个建议[动态数组、循环遍历、对象集合初始化]
编写⾼质量代码改善C#程序的157个建议[动态数组、循环遍历、对象集合初始化] 软件开发过程中,不可避免会⽤到集合,C#中的集合表现为数组和若⼲集合类。
不管是数组还是集合类,它们都有各⾃的优缺点。
如何使⽤好集合是我们在开发过程中必须掌握的技巧。
不要⼩看这些技巧,⼀旦在开发中使⽤了错误的集合或针对集合的⽅法,应⽤程序将会背离你的预想⽽运⾏。
本⽂已更新⾄。
本⽂主要学习记录以下内容: 建议16、元素数量可变的情况下不应使⽤数组 建议17、在多数情况下使⽤foreach进⾏循环遍历 建议18、foreach不能代替for 建议19、使⽤更有效的对象和集合初始化16 在C#中,数组⼀旦被创建,长度就不能改变。
如果我们需要⼀个动态且可变长度的集合,就应该使⽤ArrayList或List<T>来创建。
⽽数组本⾝,尤其是⼀维数组,在遇到要求⾼效率的算法时,则会专门被优化以提升其效率。
⼀维数组也成为向量,其性能是最佳的,在IL中使⽤了专门的指令来处理它们。
从内存使⽤的⾓度来讲,数组具有以下特点: 1、数组在创建时被分配了⼀段固定长度的内存。
2、如果数组元素是值类型,则每个元素的长度等于相应的值类型的长度 3、如果数组的元素是引⽤类型,则每个元素的长度为该引⽤类型的IntPtr.Size。
4、数组的存储结构⼀旦被分配,就不能再变化。
⽽ArryaList是这样的: 1、ArrayList是链表结构,可以动态增减内存空间。
2、如果ArrayList存储的是值类型,则会为每个元素增加12字节的空间,其中4字节⽤于对象引⽤,8字节是元素装箱时引⼊的对象头。
⽽List<T>是ArrayList的泛型实现,它省去了拆箱和装箱带来的开销。
如果⼀定要动态改变数组的长度,⼀种⽅法是将数组转换为ArrayList或List<T>,如下⾯的代码所⽰:///定义⼀个⼀维数组int[] iArr = { 0,1,3,4,6,7,9};///将数组转换为ArrayListArrayList arrayListInt = ArrayList.Adapter(iArr);arrayListInt.Add(11);///将数组转换为List<T>List<int> listInt = iArr.ToList<int>();listInt.Add(11); 还有⼀种⽅法是⽤数组的复制功能。
编写高质量代码改善C#程序的157个建议
{ Ip ip = "192.168.1.1"; //通过 Ip 类的重载转换运算符,实现字符
串到 Ip 类型的隐式转换 Console.WriteLine(ip.ToString()); Console.ReadLine();
} }
提供的就是字符串到类型 Ip 之间的隐式转换。
2、使用类型内置的 Parse、TryParse,或者如 ToString、ToDouble、ToDateTi me 等方法
继承 IConvertible 接口必须同时实现其他转型方法,如上文的 ToBoolean、ToByte,如 果不支持此类转型,则应该抛出一个 InvalidCastException,而不是一个 NotImplement edException。 4、使用 CLR 支持的转型 CLR 支持的转型,即上溯转型和下溯转型。这个概念首先是在 Java 中提出来的,实际上就 是基类和子类之间的相互转换。
所谓“基元类型”,是指编译器直接支持的数据类型。基元类型包括:sbyte、byte、short、 ushort、int、uint、long、ulong、char、float、double、bool、decimal、object、s tring。
int i = 0; float j = 0; j = i; ///int 到 float 存在一个隐式转换 i = (int)j; ///float 到 int 必须存在一个显式转换
编写高质量代码:改善C++程序的150个建议
第一部分语 法 篇本部分内容第1章 从C继承而来的第2章 从C到C++,需要做出一些改变第3章 说一说“内存管理”的那点事儿第4章 重中之重的类第5章 用好模板,向着GP开进第6章 让神秘的异常处理不再神秘第7章 用好STL这个大轮子第1章 从C继承而来的C和C++可以说是所有编程语言中关系最为紧密的两个。
在目标上,C++被定位为“a better C”;在名称上,C++有一个乳名叫做“C with classes”;在语法上,C更是C++的一个子集,C++几乎支持C语言的全部功能。
如果采用C++的方法来描述,以下方式恰如其分:class C{};class CPlusPlus :public C {};C++继承自C。
正是这种难以割舍的紧密联系使得C/C++程序员必须对C有所重视。
所以,本章就从C++的前身—C语言说起。
在开始这段学习旅程前,先分享一个只有程序员才明白的幽默:有一次,她开玩笑似地问他:“我在你心里排第几?”他回头微笑着摸了摸她的头,用手指比划了个鸭蛋。
她知道他在开玩笑,打了他一巴掌,尽管有些郁闷,但还是尽量避免流露出失望的神色。
其实,因为她是文科生,所以她并不知道:在程序员的眼中,所有的数组、列表、容器的下标都是从0开始的。
所以,我们的建议也从0开始。
建议0:不要让main函数返回void同C程序一样,每个C++ 程序都包含一个或多个函数,而且必须有一个函数命名为main,并且每个函数都由具有一定功能的语句序列组成。
操作系统将main作为程序入口,调用main函数来执行程序;main函数执行其语句序列,并返回一个值给操作系统。
在大多数系统中,main 函数的返回值用于说明程序的退出状态。
如果返回0,则代表main函数成功执行完毕,程序正常退出,否则代表程序异常退出。
然而在编写C++程序入口函数main的时候,很多程序员,特别是一些具有C基础的C++ 程序员时经常会写出如下格式的main函数:void main(){// some code ...}第1章 从C继承而来的 3上述代码在VC++中是可以正确编译、链接、执行的。
C语言程序代码优化
{
printf("%d", h);
(5)、避免不必要的整数除法
不好的代码:
m = i / j / k;
int i, j, k, m;
(6)、使用增量和减量操作符
x=x+1;
move A,x ;把x从内存取出存入累加器A
store x ;把新值存回x
unsigned int i;
while (i<1000)
i++;
}
unsigned int i;
do
i–;
}
在这两种循环中,使用do…while循环编译后生成的代码的长度短于while循环。
这是经典的速度优化,但许多编译程序(如gcc -funroll-loops)能自动完成这个事,所以现在你自己来优化这个显得效果不明显。
。。。
e = a * t;
4、结构体成员的布局
(1)按数据类型的长度排序
(2)把结构体填充成最长类型长度的整倍数
不好的代码,普通顺序:
{
long k;
} baz;
struct
double x;
char a[5];
} baz;
(3)按数据类型的长度排序本地变量
不好的代码,普通顺序
long foo, bar;
{
}
i = MAX+1;
{
}
一些公用处理模块,为了满足各种不同的调用需要,往往在内部采用了大量的if-then- else结构,这样很不好,判断语句如果太复杂,会消耗大量的时间的,应该尽量减少公用代码块的使用。(任何情况下,空间优化和时间优化都是对立的–东 楼)。当然,如果仅仅是一个(3==x)之类的简单判断,适当使用一下,也还是允许的。记住,优化永远是追求一种平衡,而不是走极端。
编程技巧:提高代码质量的十大方法
编程技巧:提高代码质量的十大方法编程是一项需要技巧和智慧的艺术。
写出高质量的代码是每个程序员都渴望实现的目标。
良好的代码质量不仅能提高软件的可维护性和可读性,还能减少错误和提高性能。
本文将介绍十种提高代码质量的方法,帮助程序员们写出更好的代码。
让我们一起来看看吧!1. 选择有意义的命名变量、函数和类的命名应具有清晰和有意义。
好的命名可以使代码更易读,降低开发和维护的难度。
避免使用单个字母或晦涩难懂的缩写作为命名,而是选择能够准确描述其用途的名称。
通过使用有意义的命名,可以使其他人更容易理解和使用你的代码。
2. 减少代码的冗余冗余的代码不仅浪费空间,还增加了维护和调试的难度。
避免重复的代码块,可以通过使用函数和类来提取公共代码,实现代码的重用性。
另外,使用循环和条件语句来替代重复的代码块,可以减少代码冗余。
冗余的代码往往也会增加错误的发生几率,因此减少代码的冗余对于提高代码质量非常重要。
3. 编写清晰的注释和文档良好的注释和文档可以帮助其他人更好地理解和使用你的代码。
在编写代码时,应当养成良好的注释和文档习惯。
对于每个函数和类,都应该编写清晰的注释,解释其功能和参数的含义。
此外,在代码中使用适当的注释,可以帮助其他人更好地理解代码的逻辑和设计思路。
4. 使用一致的代码风格一致的代码风格有助于提高代码的可读性和可维护性。
在开发项目中,应当约定好统一的代码风格,并且在整个项目中保持一致。
这包括缩进、命名规范、空格和换行等方面。
使用代码格式化工具可以帮助自动化这个过程,确保代码风格的一致性。
5. 编写可读性高的代码可读性是评估代码质量的一个重要指标。
可读性高的代码可以更容易被理解和维护。
为了编写可读性高的代码,应当遵循一些基本原则。
例如,使用有意义的变量名和函数名,避免过长的函数和复杂的嵌套结构,以及注释和文档的使用等。
通过编写可读性高的代码,可以大大提高代码的质量和可维护性。
6. 进行代码复审和单元测试代码复审和单元测试是确保代码质量的重要手段。
C语言中的代码优化技巧
C语言中的代码优化技巧在C语言中,代码优化技巧是提高程序性能和效率的关键。
通过优化代码,可以在不改变程序功能的情况下,使程序运行更快、占用更少的内存空间。
下面介绍一些C语言中常用的代码优化技巧:1. 减少函数调用:函数调用是一种很消耗资源的操作,因为需要保存现场和恢复现场。
可以通过将多个函数调用合并成一个函数,减少函数嵌套的层数,避免过度的函数调用来提高程序的性能。
2. 使用适当的数据类型:在C语言中,选择适当的数据类型可以减少内存占用和提高运行速度。
比如使用整型数据类型int来代替浮点型数据类型float,可以减少内存占用和提高运行速度。
3. 避免使用过多的指针:指针操作虽然可以提高程序的效率,但是过多的指针操作会增加程序的复杂性和出错的可能性。
可以尽量减少指针的使用,使用数组或者结构体来代替指针操作。
4. 减少循环的次数:循环是程序中占用时间最多的部分,可以通过减少循环的次数或者优化循环体内部的代码来提高程序的性能。
5. 避免使用全局变量:全局变量会增加程序的耦合性和复杂度,可以尽量减少全局变量的使用,使用局部变量来代替全局变量。
6. 使用预处理器宏:使用预处理器宏可以在编译阶段进行代码替换,提高程序的性能。
可以将一些常量或者简单的函数用宏来替代,减少函数调用和代码量。
7. 减少内存拷贝操作:内存拷贝操作是一种消耗资源的操作,可以通过使用指针来避免过多的内存拷贝操作。
8. 编译器优化选项:编译器提供了很多优化选项来帮助优化代码,比如-O2、-O3等级别的优化选项可以提高程序的性能。
总之,代码优化是一个综合性的工作,需要综合考虑程序的结构、算法和编译器的优化选项。
通过合理的优化技巧,可以使程序更加高效和优化,提高程序的性能和效率。
希望以上介绍的C语言中的代码优化技巧能够帮助您优化您的程序。
《编写高质量代码 改善C程序代码的125个建议》读书笔记思维导图
建议16-2:尽量避 免编写多用途的、
太复...
建议16-1:尽量使 用复合赋值运算符
建议16-3:尽量避 免在表达式中使用
默认...
第3章 程序控制语句应该保持简 洁高效
01
建议17: if语句应 该尽量保持 简洁,减 少...
02
建议18: 谨慎0值比 较
04
建议20: 正确使用 for循环
3 建议34-3:避
免调用任何不 可重入函数
4 建议34-4:对
于全局变量, 应通过互斥 信...
5 建议34-5:理
解可重入函数 与线程安全 函...
建议35-1:没有参 数的函数必须使用
vo...
建议35-2:尽量避 免在非调度函数中使
用...
建议35-3:避免将 函数的参数作为工作 变...
4
建议15:避免 操作符混淆
5 建议16:表达
式的设计应该 兼顾效率与可 读...
建议12-1:用 1
倒数相乘来实 现除法运算
建议12-2:使 2
用牛顿迭代法 求除数的倒数
3 建议12-3:用
减法运算来实 现整数除法 运...
4 建议12-4:用
移位运算实现 乘除法运算
5 建议12-5:尽
量将浮点除法 转化为相应 的...
最新版读书笔记,下载可以直接修改
《编写高质量代码 改善C 程序代码的125个建议》
思维导图PPT模板
本书关键字分析思维导图
指针
语句
区别
参数
结构体
第章
表达式
建议
类型
变量 使用
文件
函数
检查
代码
运算
编写高质量代码:改善C#程序的157个建议
的短语命名布尔属性
03
建议136:优先使用后缀表
示已有类型的新版本
04
建议137:委托和事件类型
应添加上级后缀
05
建议138:事件和委托变量
使用动词或形容词短语命名
06
建议139:事件处理器命名
采用组合方式
第三部分 编码规范 及习惯
11 代码整洁
01 建 议 1 4 0 : 使 用 默 认 的 访 问 修 饰 符
建议52:及时 释放资源
建议57:实现 ISerializable的 子类型应负责父 类的序列化
4 资源管理和序列化
建议53:必要时 应将不再使用的 对象引用赋值为 null
建议55:利用定 制特性减少可序 列化的字段
第一部分 语言篇
建议58:用抛出异 常代替返回错误代码
1
建议63:避免“吃 掉”异常
建议130:以复数命名枚举类型,
3
以单数命名枚举元素
建议131:用PascalCasing命名 4 公开元素
10 命名规范
建议132:考虑用类名作为属性
5
名
建议133:用camelCasing命名 6 私有字段和局部变量
第三部分 编码规范 及习惯
10 命名规范
01
建议134:有条件地使用前
缀
02
建议135:考虑使用肯定性
第三部分 编码规范 及习惯
11 代码整洁
A
建议152:最少, 甚至是不要注释
建议153:若抛出 异常,则必须要注
释
B
第三部分 编码规范及习惯
01
建议154:不要过度设计,在敏捷中体会重构的乐趣
02
建议155:随生产代码一起提交单元测试代码
C 代码优化的27个建议
1.记住阿姆达尔定律:∙func cost是函数func运行时间百分比,func speedup是你优化函数的运行的系数。
∙所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。
∙这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。
∙这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。
2.代码先保证正确,然后再考虑优化∙这并不意味着用8周时间写一个全功能的射线追踪算法,然后用8周时间去优化它。
∙分多步来做性能优化。
∙先写正确的代码,当你意识到这个函数可能会被经常调用,进行明显的优化。
∙然后再寻找算法的瓶颈,并解决(通过优化或者改进算法)。
通常,改进算法能显著地改进瓶颈——也许是采用一个你还没有预想到的方法。
所有频繁调用的函数,都需要优化。
3.我所了解的那些写出非常高效代码的人说,他们优化代码的时间,是写代码时间的两倍。
4.跳转和分支执行代价高,如果可能,尽量少用。
∙函数调用需要两次跳转,外加栈内存操作。
∙优先使用迭代而不是递归。
∙使用内联函数处理短小的函数来消除函数调用开销。
∙将循环内的函数调用移动到循环外(例如,将for(i=0;i<100;i++)DoSomething();改为DoSomething(){for(i=0;i<100;i++){…}})。
∙if…else if…else if…else if…很长的分支链执行到最后的分支需要很多的跳转。
如果可能,将其转换为一个switch声明语句,编译器有时候会将其转换为一个表查询单次跳转。
如果switch声明不可行,将最常见的场景放在if分支链的最前面。
5.仔细思考函数下标的顺序。
∙两阶或更高阶的数组在内存中还是以一维的方式在存储在内存中,这意味着(对于C/C++数组)array[i][j]和array[i][j+1]是相邻的,但是array[i][j]和array[i+1][j]可能相距很远。
编程技巧:提高代码质量的十个技巧
编程技巧:提高代码质量的十个技巧作为一个程序员,我们都希望能写出高质量的代码。
优秀的代码不仅可以提高程序的可读性和可维护性,还可以提高代码的性能和效率。
那么应该如何提高代码的质量呢?下面是我总结的十个编程技巧,希望对你提高代码质量有所帮助。
1. 命名规范良好的命名规范是编写高质量代码的基础。
一个好的命名能够清晰地传达变量、函数和类的用途和含义。
遵循命名规范可以让代码更易读、易懂。
所以,在编程过程中,我们要尽量避免使用无意义的变量名,而要使用有描述性的命名,避免使用缩写和单个字母作为变量名。
2. 注释和文档良好的注释和文档非常重要,可以使其他人更好地理解你的代码。
在编写代码时,适当地添加注释,解释代码的功能和实现逻辑,对于复杂的逻辑,还可以加入代码注释,方便后续的维护和修改。
此外,编写详细的文档也是十分重要的,它不仅能让其他人了解你的代码,也能帮助你自己更好地理清代码的思路。
3. 异常处理异常处理是编写高质量代码的关键之一。
优秀的代码应该能够处理各种可能的异常情况,并给出相应的错误提示。
合理地使用 try-catch 语句可以帮助我们捕获和处理异常,避免程序崩溃,增强代码的健壮性。
此外,要记得在 catch 块中处理异常,而不是简单地忽略它们,这样可以更好地排查问题。
4. 代码复用代码复用是提高代码质量的重要手段之一。
通过合理地设计和使用函数、类和模块等可以实现代码的复用。
这样不仅可以减少代码的重复,还可以提高代码的可读性和可维护性。
因此,在编写代码时,我们要尽量避免重复造轮子,而是要善于利用已有的代码资源。
5. 模块化设计模块化设计是编写可维护性高的代码的关键。
将代码分割成独立的模块,每个模块只负责解决一个问题,可以使代码更易于阅读、测试和维护。
通过合理的模块化设计,我们可以将复杂的问题简化成多个小问题,分而治之。
所以,在编写代码时,要注重模块的划分,保持模块间的内聚性和低耦合性。
6. 优化算法和数据结构编写高效的代码需要优化算法和数据结构的选择。
