Chinaunix首页 | 论坛 | 博客
  • 博客访问: 63148
  • 博文数量: 30
  • 博客积分: 1456
  • 博客等级: 上尉
  • 技术积分: 370
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-08 22:31
文章分类

全部博文(30)

文章存档

2011年(1)

2008年(29)

我的朋友
最近访客

分类: C/C++

2008-04-25 01:10:16

二:
1.良好地程序风格和文档将使程序更容易阅读和维护。
警告总结:
1.字符串常量中的字符被错误地解释为三字母词。
2.编写得糟糕地注释可能会意外地中止语句。
3.注释的不适当结束。
三:
1.为了保持最佳地可移植性,把字符的值限制在有符号和无符号字符范围地交集之内,或者不要在字符上执行算术元算。
2.用它们在使用时最自然的形式表示字面值。
3.不雅把整型值和枚举值混在一起使用。
4.不要依赖隐式申明。
5.在定义类型的新名字时,使用typedef而不是#define。
6.用const声明其值不会修改地常量。
7.使用名字常量而不是字面值常量。
8.不要在嵌套地代码块之间使用相同地变量名。
9.除了尸体地具体定义位置之外,在它地其他声明未知都是用extern关键字。
警告总结:
1.在声明指针变量时采用容易误导地写法。
2.误解指针声明中初始化地含义。
四:
1.在一个没有循环体的循环中,用一个分毫表示空语句,并让它独占一行。
2.for循环可读性比while循环强,因为它把用于控制循环的表达式手机起来放在一个地方。
3.在每个switch语句中都使用default子句。
警告总结:
1.编写不会产生任何结果的表达式。
2.确信if语句中的语句列表前后加上花括号。
3.在switch语句中,执行流意外地从一个case顺延到下一个case。
五:
1.使用复合赋值符可以使程序更易于维护。
2.使用条件操作符替代if语句以简化表达式。
3.使用逗号操作符来消除多余的代码。
4.不要混用整形和布尔型值。
警告总结:
1.有符号值的右移位操作不可移植的。
2.移位操作的位数是个负值。
3.连续值中各个变量的长度不一。
4.误用=而不是==进行比较。
5.在不同的用于表示布尔值的非零值之间进行比较。
6.表达式赋值的位置并不决定表达式计算的精度。
7.误用|替代||,误用&替代&&。
8.编写结果依赖于求职顺序的表达式。

1.一个值应该只具有一种意思。
2.如果指针并不指向任何有意义的东西,就把它设置为NULL。
警告总结:
1.错误对一个未初始化的指针变量进行解引用。
2.错误地对一个NULL指针进行解引用。
3.向函数错素地传递NULL指针。
4.未检测到指针表达式的错误,从而导致不可预料的结果。
5.对一个指针进行减法运算,使它非法地指向了数组第一个元素的前面的内存位置。

1.在函数原型中使用参数名,可以个使用该函数的用户提供更多的信息。
2.抽象数据类型可以减少程序对模块实现细节地依赖,从而提高程序地可靠性。
3.当递归定义清晰的优点可以补偿它的效率开销时,就可以使用这个工具。
警告总结:
1.错误地在其他函数地作用域内编写函数原型。
2.没有为那些返回值不是整型地函数编写原型。
3.把函数原型和旧式风格地函数定义混合使用。
4.在va_arg中使用错误的参数类型,导致未定义地结果。
页面167说明了指针的效率。要好好琢磨哦!!!
八:
1.一开始就编写良好地代码显然比依赖编译器来修正劣质代码更好。
2.源代码地可读性几乎总是比程序地运行时效率更为重要。
3.只要可能,函数的指针形参都应该声明为const。
4.在有些环境中,使用register关键字提高程序的运行时效率。
5.在多维数组地初始值列表中使用完整的多层花括号能提高可读性。
警告总结:
1.当访问多维数组地元素时,无用都好分隔下标。
2.在一个指向未指定长度的数组的指针上执行指针运算。
九:
1.不要试图自己编写功能相同的函数来取代库函数。
2.使用字符分类和转换函数可以提高函数的可移植性。
警告总结:
1.应该使用有符号数地表达式中使用strlen函数。
2.在表达式中混用有符号和无符号数。
3.使用strcpy函数把一个长字符串复制到一个较短的数组中,导致溢出。
4.使用strcat函数把一个字符串添加到一个数组中,导致数组溢出。
5.把strcmp函数的返回值当作布尔值进行测试。
6.把strcmp函数地返回值与1和-1进行比较。
7.使用并非以NULL字节结尾的字符序列。
8.使用strncpy函数产生不以NULL字节结尾的字符串。
9.把strncpy函数和strxxx族函数混用。
10.忘了strtok函数将会修改它所处理地字符串。
11.strtok函数是不可再入的。
十:
1.把结构标签声明和结构的typdef声明放在头文件中,当源文件需要这些声明时可以通过#include指令把它们包含进来
2.结构成员的最佳排列形式不一定旧式考虑边界对齐而浪费内存空间最少的那种排列形式。
3.把位段成员显式声明signed int或unsigned int 类型。
4.位段是不可移植的。
5.位段使源代码中位的操作表达得更为清楚。
警告总结:
1.具有相同成员列表的结构声明产生不同类型的变量。
2.使用typedef为一个自引用的结构定义名字时应该小心。
3.向函数传递结构参数是低效的。
十一:
1.动态内存分配有助于消除程序内部存在的限制。
2.使用sizeof计算数据类型的长度,提高程序的可移植性。
警告总结:
1.不检查从malloc函数返回的指针是否为NULL。
2.访问动态分配的内存之外的区域。
3.向free函数传递一个并非由malloc函数返回的指针。
4.在动态内存被释放之后再访问它。
十二:
1.消除特殊情况使代码更易于维护。
2.通过提炼语句消除if语句中的重复语句。
3.不要仅仅根据代码的大小评估它的质量。
警告总结:
1.落到链表尾部的后面。
2.使用指针时应格外小心,因为C并没有对它们的使用提供安全网。
3.从if语句中提炼语句可能会改变测试结果。
十三:
1.如果并非必要,避免使用多层间接访问。
2.cdecl程序可以帮助你分析复杂的声明。
3.把void *强制转换为其它类型的指针时必须小心。
4.使用转移表时,应始终验证下标的有效性。
5.破坏的命令行参数处理方式使你以后无法再次进行处理。
6.不寻常的代码始终应该加上一条注释,描述它的目的和原理。
警告总结:
1.对一个未初始化的指针执行间接访问操作。
2.在转移表中使用越界下标。
十四:
1.避免用#define指令定义可以用函数实现的很长序列的代码。
2.在那些对表达式求值的宏中,每个宏参数出现的地方都应该加上括号,并且在整个宏定义两边也加上括号。
3.避免用#define宏创建一种新语言。
4.采用命名约定,使程序很容易看出某个标识符是否为#define宏。
5.只要合适就应该使用文件包含,不必担心它的额外开销。
6.头文件只应该包含一组函数和(或)数据的声明。
7.把不同集合的声明分离到不同的头文件中可以改善信息隐藏。
8.嵌套#include文件使我们很难判断源文件之间的依赖关系。
警告总结:
1.不要在一个宏定义的末尾加上分号,使其成为一条完整的语句。
2.在宏定义中使用参数,但忘了在它们周围加上括号。
3.忘了在整个宏定义的两边加上括号。
十五:
1.在可能出现错误的场合,检查并报告错误。
2.操纵文本行而无需估计它们的外部表示形式这个能力有助于提高程序的可移植性。
3.使用scanf限定符提高可移植性。
4.当你打印长整数时,即使你所使用的机器并不需要,坚持使用l修改富可以提高可移植性。
警告总结:
1.忘了在一条调试用的printf语句后面跟一个fflush调用。
2.不检查fopen函数的返回值。
3.改变文件位置将丢弃任何被退回到流的字符。
4.在使用fgets时指定太小的缓冲区。
5.使用gets的输入溢出缓冲区且未被检测到。
6.使用任何scanf系列函数时,格式代码和参数指针类型不匹配。
7.在任何scanf系列函数的每个非数组、非指针参数前忘了加上&符号。
8.注意在使用scanf系列函数转换double,long double,short和long整型,在格式代码加上合适的限定符。
9.sprintf函数的输出溢出了缓冲区且未检测到。
10.混淆printf和scanf格式代码。
11.使用任何printf系列函数时,格式代码和参数类型不匹配。
12.在有些长整型长于普通整数的机器上打印长整数值时,忘了在格式代码中指定l修改符。
13.使用自动数组作为流的缓冲区时应多加小心。
十六:
1.滥用setjmp和longjmp可能导致晦涩难懂的代码。
2.对信号进行处理将导致程序的可移植性变差。
3.使用断言可以简化程序的调试。
警告总结:
1.忘了包含math.h头文件可能导致数学函数产生不正确的结果。
2.clock函数可能只产生处理器时间的近似值。
3.time函数的返回值并不一定是以秒为单位的。
4.tm结构中月份的范围并不是从1到12。
5.tm结构中的年是从1900年开始计数的年数。
6.longjmp不能返回到一个已经不再处于活动状态的函数。
7.从异步信号的处理函数中调用exit或abort函数是不安全的。
8.当每次信号发生时,你必须重新设置信号处理函数。
9.避免exit寒素的多重调用。
十七:
1.避免使用具有副作用的函数可以使程序更容易理解。
2.一个模块的接口应该避免暴露它的实现细节。
3.将数据类型参数化,使它更容易修改。
4.只有模块对外公布的接口才应该使公用的。
5.使用断言来防止非法操作。
6.几个不同的实现使用同一个通用接口使模块具有更强的可互换性。
7.复用现存的代码而不使对它进行改写。
8。迭代比尾部递归效率更高。
警告总结:
1.使用断言检查内存是否分配成功使危险的。
2.数组形式的二叉树节点位置计算公式假定数组的下标从1开始。
3.把数据封装于对它进行操纵的模块可以防止用户不正确的地访问数据。
4.与类型无关的函数没有类型检查,所以应该小心,确保传递正确类型的数据。
十八:
1.使用stdarg实现可变参素列表。
2.改进算法比优化代码更有效率。
3.使用某种环境特有的技巧会导致程序不可移植。
警告总结:
1.是连接器而不使编译器决定外部标识符的最大长度。
2.你无法链接由不同编译器产生的程序。
阅读(645) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:两个很好的学习网站

给主人留下些什么吧!~~