上一页 1 ··· 36 37 38 39 40 41 42 43 44 ··· 50 下一页
摘要: 当心文件 I/O 有错误。 阅读全文
posted @ 2018-08-04 11:24 borter 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 当心忘记编写错误处理程序,当心错误处理程序本身有误。 阅读全文
posted @ 2018-08-04 11:14 borter 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 当心变量发生上溢或下溢,数组的下标越界。 阅读全文
posted @ 2018-08-04 11:13 borter 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 当心数据类型转换发生错误。 尽量使用显式的数据类型转换(让人 们知道发生了什么事),避免让编译器轻悄悄地进行隐式的数据类型转换。 阅读全文
posted @ 2018-08-04 11:12 borter 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 当心变量的初值、缺省值错误,或者精度不够。 阅读全文
posted @ 2018-08-04 11:10 borter 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 变量(指针、数组)被创建之后应当及时把它们初始化,以防止把 未被初始化的变量当成右值使用。 阅读全文
posted @ 2018-08-04 11:09 borter 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 当心那些视觉上不易分辨的操作符发生书写错误。 我们经常会把“==”误写成“=”,象“||”、“&&”、“<=”、“>=”这类符号也很 容易发生“丢 1”失误。 然而编译器却不一定能自动指出这类错误。 阅读全文
posted @ 2018-08-04 11:08 borter 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 不要追求紧凑的代码,因为紧凑的代码并不能产生高效的机器码。 阅读全文
posted @ 2018-08-04 11:07 borter 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 有时候时间效率和空间效率可能对立,此时应当分析那个更重要, 作出适当的折衷。 例如多花费一些内存来提高性能。 阅读全文
posted @ 2018-08-04 11:06 borter 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 先优化数据结构和算法,再优化执行代码。 阅读全文
posted @ 2018-08-04 11:05 borter 阅读(420) 评论(0) 推荐(0) 编辑
摘要: 在优化程序的效率时,应当先找出限制效率的“瓶颈”,不要在无关 紧要之处优化。 阅读全文
posted @ 2018-08-04 11:02 borter 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 以提高程序的全局效率为主,提高局部效率为辅。 阅读全文
posted @ 2018-08-04 11:01 borter 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 不要一味地追求程序的效率,应当在满足正确性、可靠性、健壮性、 可读性等质量因素的前提下,设法提高程序的效率。 阅读全文
posted @ 2018-08-04 10:59 borter 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 如果输入参数采用“指针传递”,那么加 const 修饰可以防止意外地改动该指针,起 到保护作用。 阅读全文
posted @ 2018-08-04 10:58 borter 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 若在逻辑上 A 是 B 的“一部分”(a part of) ,则不允许 B 从 A 派生, 而是要用 A 和其它东西组合出 B。 阅读全文
posted @ 2018-08-04 10:57 borter 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 看起来很简单,但是实际应用时可能会有意外,继承的概念在程序 世界与现实世界并不完全相同。 阅读全文
posted @ 2018-08-04 10:56 borter 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 若在逻辑上 B 是 A 的“一种”(a kind of ),则允许 B 继承 A 的功 能和属性。 例如男人(Man)是人(Human)的一种,男孩(Boy)是男人的一种。 那么类 Man 可以从类 Human 派生,类 Boy 可以从类 Man 派生。 阅读全文
posted @ 2018-08-04 10:55 borter 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 如果类 A 和类 B 毫不相关,不可以为了使 B 的功能更多些而让 B 继承 A 的功能和属性。 不要觉得“白吃白不吃”,让一个好端端的健壮青年无缘无故地吃人参补身体。 阅读全文
posted @ 2018-08-04 10:53 borter 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 参数缺省值只能出现在函数的声明中,而不能出现在定义体中 。 阅读全文
posted @ 2018-08-03 13:47 borter 阅读(1110) 评论(0) 推荐(0) 编辑
摘要: 函数 free 的原型如下: void free( void * memblock ); 为什么 free 函数不象 malloc 函数那样复杂呢? 这是因为指针 p 的类型以及它所指 的内存的容量事先都是知道的,语句 free(p)能正确地释放内存。 如果 p 是 NULL 指针, 那么 free 阅读全文
posted @ 2018-08-03 13:45 borter 阅读(1268) 评论(0) 推荐(0) 编辑
摘要: malloc 返回值的类型是 void *,所以在调用 malloc 时要显式地进行类型转换,将 void * 转换成所需要的指针类型。 阅读全文
posted @ 2018-08-03 13:43 borter 阅读(830) 评论(0) 推荐(0) 编辑
摘要: malloc 函数本身并不识别要申请的内存是什么类型,它只关心内存的总字节数。我 们通常记不住 int, float 等数据类型的变量的确切字节数。 例如 int 变量在 16 位系统 下是 2 个字节,在 32 位下是 4 个字节;而 float 变量在 16 位系统下是 4 个字节,在 32 位 阅读全文
posted @ 2018-08-03 13:43 borter 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 用 free 或 delete 释放了内存之后,立即将指针设置为 NULL,防止产 生“野指针”。 阅读全文
posted @ 2018-08-03 13:41 borter 阅读(510) 评论(0) 推荐(0) 编辑
摘要: 动态内存的申请与释放必须配对,防止内存泄漏。 阅读全文
posted @ 2018-08-03 13:40 borter 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 避免数组或指针的下标越界,特别要当心发生“多 1”或者“少 1” 操作。 阅读全文
posted @ 2018-08-03 13:39 borter 阅读(891) 评论(0) 推荐(0) 编辑
摘要: 不要忘记为数组和动态内存赋初值。 防止将未被初始化的内存作为右 值使用。 阅读全文
posted @ 2018-08-03 13:38 borter 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 用 malloc 或 new 申请内存之后,应该立即检查指针值是否为 NULL。 防止使用指针值为 NULL 的内存。 阅读全文
posted @ 2018-08-03 13:37 borter 阅读(1890) 评论(0) 推荐(0) 编辑
摘要: 释放了内存却继续使用它。 有三种情况: (1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内 存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。 (2)函数的 return 语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用” , 因为该内存在函数体结束 阅读全文
posted @ 2018-08-03 13:36 borter 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 忘记了释放内存,造成内存泄露。 含有这种错误的函数每被调用一次就丢失一块内存。 刚开始时系统的内存充足,你 看不到错误。 终有一次程序突然死掉,系统出现提示:内存耗尽。 动态内存的申请与释放必须配对,程序中 malloc 与 free 的使用次数一定要相同,否 则肯定有错误(new/delete 同 阅读全文
posted @ 2018-08-03 13:35 borter 阅读(537) 评论(0) 推荐(0) 编辑
摘要: 内存分配成功并且已经初始化,但操作越过了内存的边界。 例如在使用数组时经常发生下标“多 1”或者“少 1”的操作。 特别是在 for 循环语 句中,循环次数很容易搞错,导致数组操作越界。 阅读全文
posted @ 2018-08-03 13:34 borter 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 内存分配虽然成功,但是尚未初始化就引用它。 犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值 全为零,导致引用初值错误(例如数组)。 内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其有。 所以无论用何种方式创建数组,都别忘了赋初值,即便是赋 阅读全文
posted @ 2018-08-03 13:33 borter 阅读(1965) 评论(0) 推荐(0) 编辑
摘要: 内存分配未成功,却使用了它。 编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。 常用解决办法是, 在使用内存之前检查指针是否为 NULL。 如果指针 p 是函数的参数,那么在函数的入口 处用 assert(p!=NULL)进行检查。 如果是用 malloc 或 new 来申请内存,应该用 阅读全文
posted @ 2018-08-03 13:32 borter 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 一般教科书都鼓励程序员们进行防错设计,但要记住这种编程风格可 能会隐瞒错误。 当进行防错设计时,如果“不可能发生”的事情的确发生了,则要 使用断言进行报警。 阅读全文
posted @ 2018-08-03 13:30 borter 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 在编写函数时,要进行反复的考查,并且自问: “我打算做哪些假定?” 一旦确定了的假定,就要使用断言对假定进行检查。 阅读全文
posted @ 2018-08-03 13:29 borter 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 在函数的入口处,使用断言检查参数的有效性(合法性)。 阅读全文
posted @ 2018-08-03 13:28 borter 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 使用断言捕捉不应该发生的非法情况。 不要混淆非法情况与错误情况 之间的区别,后者是必然存在的并且是一定要作出处理的。 阅读全文
posted @ 2018-08-03 13:27 borter 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 用于出错处理的返回值一定要清楚,让使用者不容易忽视或误解错误 情况。 阅读全文
posted @ 2018-08-03 13:26 borter 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 不仅要检查输入参数的有效性,还要检查通过其它途径进入函数体内 的变量的有效性,例如全局变量、文件句柄等。 阅读全文
posted @ 2018-08-03 13:25 borter 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 尽量避免函数带有“记忆”功能。 相同的输入应当产生相同的输出。 阅读全文
posted @ 2018-08-03 13:24 borter 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 函数体的规模要小,尽量控制在 50 行代码之内。 阅读全文
posted @ 2018-08-03 13:23 borter 阅读(298) 评论(0) 推荐(0) 编辑
上一页 1 ··· 36 37 38 39 40 41 42 43 44 ··· 50 下一页