摘要: 参数缺省值只能出现在函数的声明中,而不能出现在定义体中 。 阅读全文
posted @ 2018-08-03 13:47 Borter 阅读(1131) 评论(0) 推荐(0)
摘要: 函数 free 的原型如下: void free( void * memblock ); 为什么 free 函数不象 malloc 函数那样复杂呢? 这是因为指针 p 的类型以及它所指 的内存的容量事先都是知道的,语句 free(p)能正确地释放内存。 如果 p 是 NULL 指针, 那么 free 阅读全文
posted @ 2018-08-03 13:45 Borter 阅读(1315) 评论(0) 推荐(0)
摘要: malloc 返回值的类型是 void *,所以在调用 malloc 时要显式地进行类型转换,将 void * 转换成所需要的指针类型。 阅读全文
posted @ 2018-08-03 13:43 Borter 阅读(852) 评论(0) 推荐(0)
摘要: malloc 函数本身并不识别要申请的内存是什么类型,它只关心内存的总字节数。我 们通常记不住 int, float 等数据类型的变量的确切字节数。 例如 int 变量在 16 位系统 下是 2 个字节,在 32 位下是 4 个字节;而 float 变量在 16 位系统下是 4 个字节,在 32 位 阅读全文
posted @ 2018-08-03 13:43 Borter 阅读(283) 评论(0) 推荐(0)
摘要: 用 free 或 delete 释放了内存之后,立即将指针设置为 NULL,防止产 生“野指针”。 阅读全文
posted @ 2018-08-03 13:41 Borter 阅读(525) 评论(0) 推荐(0)
摘要: 动态内存的申请与释放必须配对,防止内存泄漏。 阅读全文
posted @ 2018-08-03 13:40 Borter 阅读(267) 评论(0) 推荐(0)
摘要: 避免数组或指针的下标越界,特别要当心发生“多 1”或者“少 1” 操作。 阅读全文
posted @ 2018-08-03 13:39 Borter 阅读(910) 评论(0) 推荐(0)
摘要: 不要忘记为数组和动态内存赋初值。 防止将未被初始化的内存作为右 值使用。 阅读全文
posted @ 2018-08-03 13:38 Borter 阅读(311) 评论(0) 推荐(0)
摘要: 用 malloc 或 new 申请内存之后,应该立即检查指针值是否为 NULL。 防止使用指针值为 NULL 的内存。 阅读全文
posted @ 2018-08-03 13:37 Borter 阅读(1906) 评论(0) 推荐(0)
摘要: 释放了内存却继续使用它。 有三种情况: (1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内 存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。 (2)函数的 return 语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用” , 因为该内存在函数体结束 阅读全文
posted @ 2018-08-03 13:36 Borter 阅读(439) 评论(0) 推荐(0)
摘要: 忘记了释放内存,造成内存泄露。 含有这种错误的函数每被调用一次就丢失一块内存。 刚开始时系统的内存充足,你 看不到错误。 终有一次程序突然死掉,系统出现提示:内存耗尽。 动态内存的申请与释放必须配对,程序中 malloc 与 free 的使用次数一定要相同,否 则肯定有错误(new/delete 同 阅读全文
posted @ 2018-08-03 13:35 Borter 阅读(553) 评论(0) 推荐(0)
摘要: 内存分配成功并且已经初始化,但操作越过了内存的边界。 例如在使用数组时经常发生下标“多 1”或者“少 1”的操作。 特别是在 for 循环语 句中,循环次数很容易搞错,导致数组操作越界。 阅读全文
posted @ 2018-08-03 13:34 Borter 阅读(201) 评论(0) 推荐(0)
摘要: 内存分配虽然成功,但是尚未初始化就引用它。 犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值 全为零,导致引用初值错误(例如数组)。 内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其有。 所以无论用何种方式创建数组,都别忘了赋初值,即便是赋 阅读全文
posted @ 2018-08-03 13:33 Borter 阅读(1980) 评论(0) 推荐(0)
摘要: 内存分配未成功,却使用了它。 编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。 常用解决办法是, 在使用内存之前检查指针是否为 NULL。 如果指针 p 是函数的参数,那么在函数的入口 处用 assert(p!=NULL)进行检查。 如果是用 malloc 或 new 来申请内存,应该用 阅读全文
posted @ 2018-08-03 13:32 Borter 阅读(247) 评论(0) 推荐(0)
摘要: 一般教科书都鼓励程序员们进行防错设计,但要记住这种编程风格可 能会隐瞒错误。 当进行防错设计时,如果“不可能发生”的事情的确发生了,则要 使用断言进行报警。 阅读全文
posted @ 2018-08-03 13:30 Borter 阅读(148) 评论(0) 推荐(0)
摘要: 在编写函数时,要进行反复的考查,并且自问: “我打算做哪些假定?” 一旦确定了的假定,就要使用断言对假定进行检查。 阅读全文
posted @ 2018-08-03 13:29 Borter 阅读(126) 评论(0) 推荐(0)
摘要: 在函数的入口处,使用断言检查参数的有效性(合法性)。 阅读全文
posted @ 2018-08-03 13:28 Borter 阅读(306) 评论(0) 推荐(0)
摘要: 使用断言捕捉不应该发生的非法情况。 不要混淆非法情况与错误情况 之间的区别,后者是必然存在的并且是一定要作出处理的。 阅读全文
posted @ 2018-08-03 13:27 Borter 阅读(210) 评论(0) 推荐(0)
摘要: 用于出错处理的返回值一定要清楚,让使用者不容易忽视或误解错误 情况。 阅读全文
posted @ 2018-08-03 13:26 Borter 阅读(281) 评论(0) 推荐(0)
摘要: 不仅要检查输入参数的有效性,还要检查通过其它途径进入函数体内 的变量的有效性,例如全局变量、文件句柄等。 阅读全文
posted @ 2018-08-03 13:25 Borter 阅读(387) 评论(0) 推荐(0)
摘要: 尽量避免函数带有“记忆”功能。 相同的输入应当产生相同的输出。 阅读全文
posted @ 2018-08-03 13:24 Borter 阅读(226) 评论(0) 推荐(0)
摘要: 函数体的规模要小,尽量控制在 50 行代码之内。 阅读全文
posted @ 2018-08-03 13:23 Borter 阅读(318) 评论(0) 推荐(0)
摘要: 函数的功能要单一,不要设计多用途的函数。 阅读全文
posted @ 2018-08-03 13:22 Borter 阅读(213) 评论(0) 推荐(0)
摘要: 在函数体的“出口处”,对 return 语句的正确性和效率进行检查。 如果函数有返回值,那么函数的“出口处”是 return 语句。 我们不要轻视 return 语 句。如果 return 语句写得不好,函数要么出错,要么效率低下。 阅读全文
posted @ 2018-08-03 13:19 Borter 阅读(212) 评论(0) 推荐(0)
摘要: 在函数体的“入口处”,对参数的有效性进行检查。 阅读全文
posted @ 2018-08-03 13:15 Borter 阅读(273) 评论(0) 推荐(0)
摘要: 如果函数的返回值是一个对象,有些场合用“引用传递”替换“值传 递”可以提高效率。而有些场合只能用“值传递”而不能用“引用传递”,否则会出 错。 阅读全文
posted @ 2018-08-03 13:14 Borter 阅读(175) 评论(0) 推荐(0)
摘要: 有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达 , 可以附加返回值。 阅读全文
posted @ 2018-08-03 13:13 Borter 阅读(401) 评论(0) 推荐(0)
摘要: 不要将正常值和错误标志混在一起返回。 正常值用输出参数获得 ,而 错误标志用 return 语句返回。 C标准库函数的设计者为什么要将 getchar声明为令人迷糊的 int 类型呢? 他会那么傻吗? 在正常情况下,getchar 的确返回单个字符。 但如果 getchar 碰到文件结束标志或发 生 阅读全文
posted @ 2018-08-03 13:12 Borter 阅读(211) 评论(0) 推荐(0)
摘要: 函数名字与返回值类型在语义上不可冲突。 违反这条规则的典型代表是 C 标准库函数 getchar。 阅读全文
posted @ 2018-08-03 13:09 Borter 阅读(139) 评论(0) 推荐(0)
摘要: 不要省略返回值的类型。 C 语言中,凡不加类型说明的函数,一律自动按整型处理。这样做不会有什么好处, 却容易被误解为 void 类型。 C++语言有很严格的类型安全检查,不允许上述情况发生。由于 C++程序可以调用 C 函数,为了避免混乱,规定任何 C++/ C 函数都必须有类型。 如果函数没有返回 阅读全文
posted @ 2018-08-03 13:08 Borter 阅读(632) 评论(0) 推荐(0)
摘要: 尽量不要使用类型和数目不确定的参数。 C 标准库函数 printf 是采用不确定参数的典型代表,其原型为: int printf(const chat *format[, argument]…); 这种风格的函数在编译时丧失了严格的类型安全检查。 阅读全文
posted @ 2018-08-03 13:07 Borter 阅读(259) 评论(0) 推荐(0)
摘要: 避免函数有太多的参数,参数个数尽量控制在 5 个以内。 如果参数太 多,在使用时容易将参数类型或顺序搞错。 阅读全文
posted @ 2018-08-03 13:06 Borter 阅读(752) 评论(0) 推荐(0)
摘要: 如果输入参数以值传递的方式传递对象,则宜改用“const &”方式来 传递,这样可以省去临时对象的构造和析构过程,从而提高效率。 阅读全文
posted @ 2018-08-03 13:04 Borter 阅读(134) 评论(0) 推荐(0)
摘要: 如果参数是指针,且仅作输入用,则应在类型前加 const,以防止该 指针在函数体内被意外修改。 阅读全文
posted @ 2018-08-03 13:02 Borter 阅读(281) 评论(0) 推荐(0)
摘要: 参数命名要恰当,顺序要合理。 阅读全文
posted @ 2018-08-03 12:57 Borter 阅读(148) 评论(0) 推荐(0)
摘要: 参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。 阅读全文
posted @ 2018-08-03 12:56 Borter 阅读(542) 评论(0) 推荐(0)
摘要: 如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。 例如: const float RADIUS = 100; const float DIAMETER = RADIUS * 2; 阅读全文
posted @ 2018-08-03 12:54 Borter 阅读(135) 评论(0) 推荐(0)
摘要: 需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义 文件的头部。 为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。 阅读全文
posted @ 2018-08-03 12:53 Borter 阅读(263) 评论(0) 推荐(0)
摘要: 在 C++ 程序中只使用 const 常量而不使用宏常量,即 const 常量完 全取代宏常量。 阅读全文
posted @ 2018-08-03 12:45 Borter 阅读(222) 评论(0) 推荐(0)
摘要: 尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或 字符串。 例如: #define MAX 100 /* C 语言的宏常量 */ const int MAX = 100; // C++ 语言的 const 常量 const float PI = 3.14159; // C++ 语言的 co 阅读全文
posted @ 2018-08-03 12:44 Borter 阅读(398) 评论(0) 推荐(0)
摘要: 不要忘记最后那个 default 分支。 即使程序真的不需要 default 处理, 也应该保留语句 default : break; 这样做并非多此一举,而是为了防止别人误以 为你忘了 default 处理。 阅读全文
posted @ 2018-08-03 12:43 Borter 阅读(184) 评论(0) 推荐(0)
摘要: 每个 case 语句的结尾不要忘了加 break,否则将导致多个分支重叠 (除非有意使多个分支重叠)。 阅读全文
posted @ 2018-08-03 12:42 Borter 阅读(734) 评论(0) 推荐(0)
摘要: 建议 for 语句的循环控制变量的取值采用“半开半闭区间”写法。 阅读全文
posted @ 2018-08-03 12:41 Borter 阅读(794) 评论(0) 推荐(0)
摘要: 不可在 for 循环体内修改循环变量,防止 for 循环失去控制。 阅读全文
posted @ 2018-08-03 12:40 Borter 阅读(612) 评论(0) 推荐(0)
摘要: 如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。 并且由 于前者老要进行逻辑判断,打断了循环“流水线”作业,使得编译器不能对循环进 行优化处理,降低了效率。 如果 N 非常小,两者效率差别并不明显,,因为程序更加简洁。 阅读全文
posted @ 2018-08-03 12:39 Borter 阅读(403) 评论(0) 推荐(0)
摘要: 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的 循环放在最外层,以减少 CPU 跨切循环层的次数。 阅读全文
posted @ 2018-08-03 12:36 Borter 阅读(357) 评论(0) 推荐(0)
摘要: 应当将指针变量用“==”或“!=”与 NULL 比较。 指针变量的零值是“空”(记为 NULL)。 尽管 NULL 的值与 0 相同,但是两者意义不 同。 假设指针变量的名字为 p,它与零值比较的标准 if 语句如下: if (p == NULL) // p 与 NULL 显式比较,强调 p 是指针 阅读全文
posted @ 2018-08-03 12:35 Borter 阅读(395) 评论(0) 推荐(0)
摘要: 不可将浮点变量用“==”或“!=”与任何数字比较。 千万要留意,无论是 float 还是 double 类型的变量,都有精度限制。所以一定要避 免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。 假设浮点变量的名字为 x,应当将 if (x == 0.0) // 隐含 阅读全文
posted @ 2018-08-03 12:34 Borter 阅读(900) 评论(0) 推荐(0)
摘要: 应当将整型变量用“==”或“!=”直接与 0 比较。 假设整型变量的名字为 value,它与零值比较的标准 if 语句如下: if (value == 0) if (value != 0) 不可模仿布尔变量的风格而写成 if (value) // 会让人误解 value 是布尔变量 if (!val 阅读全文
posted @ 2018-08-03 12:32 Borter 阅读(345) 评论(0) 推荐(0)
摘要: 不可将布尔变量直接与 TRUE、FALSE 或者 1、0 进行比较。 根据布尔类型的语义,零值为“假”(记为 FALSE),任何非零值都是“真”(记为 TRUE)。 TRUE 的值究竟是什么并没有统一的标准。例如 Visual C++ 将 TRUE 定义为 1, 而 Visual Basic 则将 阅读全文
posted @ 2018-08-03 12:31 Borter 阅读(1518) 评论(0) 推荐(0)
摘要: 不要把程序中的复合表达式与“真正的数学表达式”混淆。 例如: if (a < b < c) // a < b < c 是数学表达式而不是程序表达式 并不表示 if ((a<b) && (b<c)) 而是成了令人费解的 if ( (a<b)<c ) 阅读全文
posted @ 2018-08-03 12:29 Borter 阅读(176) 评论(0) 推荐(0)
摘要: 例如: d = (a = b + c) + r ; 该表达式既求 a 值又求 d 值。 应该拆分为两个独立的语句: a = b + c; d = a + r; 阅读全文
posted @ 2018-08-03 12:28 Borter 阅读(147) 评论(0) 推荐(0)
摘要: 不要编写太复杂的复合表达式。 例如: i = a >= b && c < d && c + f <= g + h ; // 复合表达式过于复杂 阅读全文
posted @ 2018-08-03 12:27 Borter 阅读(162) 评论(0) 推荐(0)
摘要: 如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免 使用默认的优先级。 阅读全文
posted @ 2018-08-03 12:25 Borter 阅读(640) 评论(0) 推荐(0)
摘要: 为了防止某一软件库中的一些标识符和其它软件库中的冲突 ,可以为 各种标识符加上能反映软件性质的前缀。 例如三维图形标准 OpenGL 的所有库函数 均以 gl 开头,所有常量(或宏定义)均以 GL 开头。 阅读全文
posted @ 2018-08-03 12:24 Borter 阅读(157) 评论(0) 推荐(0)
摘要: 类的数据成员加前缀 m_(表示 member),这样可以避免数据成员与 成员函数的参数同名。 例如: void Object::SetValue(int width, int height) { m_width = width; m_height = height; } 阅读全文
posted @ 2018-08-03 12:23 Borter 阅读(1640) 评论(0) 推荐(0)
摘要: 如果不得已需要全局变量,则使全局变量加前缀 g_(表示 global)。 例如: int g_howManyPeople; // 全局变量 int g_howMuchMoney; // 全局变量 阅读全文
posted @ 2018-08-03 12:22 Borter 阅读(831) 评论(0) 推荐(0)
摘要: 静态变量加前缀 s_(表示 static)。 例如: void Init(…) { static int s_initValue; // 静态变量 … } 阅读全文
posted @ 2018-08-03 12:21 Borter 阅读(1384) 评论(0) 推荐(0)
摘要: 常量全用大写的字母,用下划线分割单词。 例如: const int MAX = 100; const int MAX_LENGTH = 100; 阅读全文
posted @ 2018-08-03 12:20 Borter 阅读(564) 评论(0) 推荐(0)
摘要: 变量和参数用小写字母开头的单词组合而成。 例如: BOOL flag; int drawMode; 阅读全文
posted @ 2018-08-03 12:19 Borter 阅读(453) 评论(0) 推荐(0)
摘要: 类名和函数名用大写字母开头的单词组合而成。 例如: class Node; // 类名 class LeafNode; // 类名 void Draw(void); // 函数名 void SetValue(int value); // 函数名 阅读全文
posted @ 2018-08-03 12:17 Borter 阅读(899) 评论(0) 推荐(0)
摘要: 用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。 例如: int minValue; int maxValue; int SetValue(…); int GetValue(…); 阅读全文
posted @ 2018-08-03 12:14 Borter 阅读(278) 评论(0) 推荐(0)
摘要: 尽量避免名字中出现数字编号,如 Value1,Value2 等,除非逻辑上的 确需要编号。 这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名 字(因为用数字编号最省事)。 阅读全文
posted @ 2018-08-03 12:14 Borter 阅读(270) 评论(0) 推荐(0)
摘要: 全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组) 。 、类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。 例如: DrawBox(); // 全局函数 box->Draw(); // 类的成员函数 阅读全文
posted @ 2018-08-03 12:13 Borter 阅读(791) 评论(0) 推荐(0)
摘要: 变量的名字应当使用“名词”或者“形容词+名词”。 例如: float value; float oldValue; float newValue; 阅读全文
posted @ 2018-08-03 12:12 Borter 阅读(860) 评论(0) 推荐(0)
摘要: 程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的 作用域不同而不会发生语法错误,但会使人误解。 阅读全文
posted @ 2018-08-03 12:11 Borter 阅读(221) 评论(0) 推荐(0)
摘要: 程序中不要出现仅靠大小写区分的相似的标识符。 例如: int x, X; // 变量 x 与 X 容易混淆 void foo(int x); // 函数 foo 与 FOO 容易混淆 void FOO(float x); 阅读全文
posted @ 2018-08-03 12:10 Borter 阅读(312) 评论(0) 推荐(0)
摘要: 程序中不要出现仅靠大小写区分的相似的标识符。 阅读全文
posted @ 2018-08-03 12:08 Borter 阅读(166) 评论(0) 推荐(0)
摘要: 命名规则尽量与所采用的操作系统或开发工具的风格保持一致。 例如 Windows 应用程序的标识符通常采用“大小写”混排的方式,如 AddChild。而 Unix 应用程序的标识符通常采用“小写加下划线”的方式,如 add_child。 别把这两类风格混在一起用。 阅读全文
posted @ 2018-08-03 12:07 Borter 阅读(323) 评论(0) 推荐(0)
摘要: 标识符的长度应当符合“min-length && max-information”原则。 几十年前老 ANSI C 规定名字不准超过 6 个字符,现今的 C++/C 不再有此限制。一 般来说,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为 怪。 那么名字是否越长约好?不见得! 阅读全文
posted @ 2018-08-03 12:05 Borter 阅读(482) 评论(0) 推荐(0)
摘要: 标识符应当直观且可以拼读,可望文知意,不必进行“解码”。 标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。 程序中的英文单词一般不会太复杂,用词应当准确。例如不要把 CurrentValue 写成 NowValue。 阅读全文
posted @ 2018-08-03 12:04 Borter 阅读(142) 评论(0) 推荐(0)
摘要: ,便于阅读。 阅读全文
posted @ 2018-08-03 12:02 Borter 阅读(144) 评论(0) 推荐(0)
摘要: 注释的位置应与被描述的代码相邻,可以放在代码的上方或右方 ,不 可放在下方。 阅读全文
posted @ 2018-08-03 12:01 Borter 阅读(323) 评论(0) 推荐(0)
摘要: 注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而 有害。 阅读全文
posted @ 2018-08-03 12:00 Borter 阅读(147) 评论(0) 推荐(0)
摘要: 尽量避免在注释中使用缩写,特别是不常用缩写。 阅读全文
posted @ 2018-08-03 12:00 Borter 阅读(315) 评论(0) 推荐(0)
摘要: 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码 的一致性。不再有用的注释要删除。 阅读全文
posted @ 2018-08-03 11:59 Borter 阅读(346) 评论(0) 推荐(0)
摘要: 如果代码本来就是清楚的,则不必加注释。否则多此一举,令人厌烦。 例如 i++; // i 加 1,多余的注释 阅读全文
posted @ 2018-08-03 11:58 Borter 阅读(172) 评论(0) 推荐(0)
摘要: 注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主, 注释太多了会让人眼花缭乱。注释的花样要少。 阅读全文
posted @ 2018-08-03 11:57 Borter 阅读(147) 评论(0) 推荐(0)
摘要: 应当将修饰符 * 和 & 紧靠变量名 阅读全文
posted @ 2018-08-03 11:56 Borter 阅读(192) 评论(0) 推荐(0)
摘要: 长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以 便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。 阅读全文
posted @ 2018-08-03 11:51 Borter 阅读(300) 评论(0) 推荐(0)
摘要: 代码行最大长度宜控制在 70 至 80 个字符以内。代码行不要过长,否 则眼睛看不过来,也不便于打印。 阅读全文
posted @ 2018-08-03 11:50 Borter 阅读(467) 评论(0) 推荐(0)
摘要: { }之内的代码块在‘{’右边数格处左对齐。 阅读全文
posted @ 2018-08-03 11:49 Borter 阅读(287) 评论(0) 推荐(0)
摘要: 程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用 它们的语句左对齐。 阅读全文
posted @ 2018-08-03 11:48 Borter 阅读(4588) 评论(0) 推荐(0)
摘要: 对于表达式比较长的 for 语句和 if 语句,为了紧凑起见可以适当地去 掉一些空格,如 for (i=0; i<10; i++)和 if ((a<=b) && (c<=d))。 阅读全文
posted @ 2018-08-03 11:39 Borter 阅读(199) 评论(0) 推荐(0)
摘要: 象“[]”、“.”、“->”这类操作符前后不加空格。 阅读全文
posted @ 2018-08-03 11:38 Borter 阅读(413) 评论(0) 推荐(0)
摘要: 一元操作符如“!”、 “~”、“++”、“--”、“&”(地址运算符)等前后不 加空格。 阅读全文
posted @ 2018-08-03 11:37 Borter 阅读(302) 评论(0) 推荐(0)
摘要: 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符 , 如“=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元 操作符的前后应当加空格。 阅读全文
posted @ 2018-08-03 11:36 Borter 阅读(280) 评论(0) 推荐(0)
摘要: ‘,’之后要留空格,如 Function(x, y, z)。如果‘;’不是一行的结束 符号,其后要留空格,如 for (initialization; condition; update)。 阅读全文
posted @ 2018-08-03 11:35 Borter 阅读(425) 评论(0) 推荐(0)
摘要: 函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。 阅读全文
posted @ 2018-08-03 11:33 Borter 阅读(1397) 评论(0) 推荐(0)
摘要: ‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。 阅读全文
posted @ 2018-08-03 11:33 Borter 阅读(498) 评论(0) 推荐(0)
摘要: 关键字之后要留空格。象 const、virtual、inline、case 等关键字之后 至少要留一个空格,否则无法辨析关键字。 象 if、for、while 等关键字之后应留一个 空格再跟左括号‘(’,以突出关键字。 阅读全文
posted @ 2018-08-03 11:30 Borter 阅读(406) 评论(0) 推荐(0)
摘要: 尽可能在定义变量的同时初始化该变量(就近原则) 如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。 如果引用 了未被初始化的变量,可能会导致程序错误。本建议可以减少隐患。 阅读全文
posted @ 2018-08-03 11:25 Borter 阅读(278) 评论(0) 推荐(0)
摘要: if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论 执行语句有多少都要加{}。这样可以防止书写失误。 阅读全文
posted @ 2018-08-03 11:21 Borter 阅读(350) 评论(0) 推荐(0)
摘要: 一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样 的代码容易阅读,并且方便于写注释。 阅读全文
posted @ 2018-08-03 11:19 Borter 阅读(180) 评论(0) 推荐(0)
摘要: 在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应 加空行分隔。 阅读全文
posted @ 2018-08-03 11:18 Borter 阅读(114) 评论(0) 推荐(0)
摘要: 在每个类声明之后、每个函数定义结束之后都要加空行。 阅读全文
posted @ 2018-08-03 11:05 Borter 阅读(376) 评论(0) 推荐(0)
摘要: 不提倡使用全局变量,尽量不要在头文件中出现象 extern int value 这 类声明。 阅读全文
posted @ 2018-08-03 11:02 Borter 阅读(236) 评论(0) 推荐(0)
摘要: 头文件中只存放“声明”而不存放“定义” 在 C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数 。 这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定 义与声明分开,不论该函数体有多么小。 阅读全文
posted @ 2018-08-03 11:01 Borter 阅读(505) 评论(0) 推荐(0)
摘要: 用 #include “filename.h” 格式来引用非标准库的头文件(编译器将 从用户的工作目录开始搜索) 阅读全文
posted @ 2018-08-03 11:00 Borter 阅读(342) 评论(0) 推荐(0)
摘要: 用 #include <filename.h> 格式来引用标准库的头文件(编译器将从 标准库目录开始搜索)。 阅读全文
posted @ 2018-08-03 10:59 Borter 阅读(741) 评论(0) 推荐(0)