高质量程序设计指南-C++C语言.pptVIP

  • 13
  • 0
  • 约3.66千字
  • 约 12页
  • 2023-01-09 发布于广东
  • 举报
C++/C编程规范 ——帮助程序员一次性编写出高质量的程序 林 锐 博士 linrui@ 上 海 漫 索 计 算 机 科 技 有 限 公 司 目录 0. 编程老手和高手的误区 1. 程序的版式 2. 命名规则 3. 表达式和基本语句 4. 函数设计 5. 内存管理 6. C++/C试题与答案,代码检查表 0. 编程老手和高手的误区 自我臭美的程序员 程序员不同于武林人士,我们不要崇拜邪派高手 大学计算机教育的失误:从来就没有重视质量,绝大多数学士、硕士、博士不了解软件质量,不知道如何有效地提高软件的质量。 高校毕业生C++/C编程考试的结果:程序质量低下 什么是编程老手:能够长期稳定地编写出高质量程序的程序员 什么是编程高手:能够长期稳定地编写出高难度、高质量程序的程序员 1. 程序的版式 1.1 文件结构 版权和版本 头文件的作用 头文件和定义文件的结构,正确使用include,ifndef/define/endif 目录结构 1.2 版式 空行,代码行 代码行内的空格 对齐 修饰符 * 的位置 注释 类的版式:public, private 前后之争 2. 命名规则 不要追求世界上最好的命名规则!在机构内部一致即可。 匈牙利法的利弊 一些共性规则: 直观并且可以拼读,可望文知意,不必“解码”。 名字的长度:min-length max-information 原则 与操作系统和开发工具的风格保持一致 程序中不要出现仅靠大小写区分的相似的标识符 程序中不要出现标识符完全相同的局部变量和全局变量 变量的名字应当使用“名词”或者“形容词+名词” 全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。 用正确的反义词组命名具有互斥意义的变量或相反动作的函数等 尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号 3. 表达式和基本语句 3.1 表达式 如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。 不要编写太复杂的复合表达式。 不要把程序中的复合表达式与“真正的数学表达式”混淆。例如 if (a b c) 3.2 你会编写正确的 if 语句吗 布尔变量与零值比较 整型变量与零值比较 浮点变量与零值比较 指针变量与零值比较 为什么有人用 If(NULL == P) 这样“古怪”的格式 3.3 循环语句 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。 如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。 建议for语句的循环控制变量的取值采用“半开半闭区间”写法。 3.4 switch, goto … 4. 函数设计 4.1 参数的规则 参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。 参数命名要恰当,顺序要合理。 示例 StringCopy(char *str1,char *str2) 如果参数是指针,且仅做输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。 避免函数有太多的参数,参数个数尽量控制在5个以内。如果参数太多,在使用时容易将参数类型或顺序搞错。 尽量不要使用类型和数目不确定的参数。例如 printf 4.2 返回值的规则 不要省略返回值的类型。 函数名字与返回值类型在语义上不可冲突。例如 getchar 不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return语句返回。 有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达,可以附加返回值。例如 char *strcpy(char *strDest,const char *strSrc); 4.3 函数内部实现的规则:在函数体的“入口处”和“出口处”从严把关 在函数体的“入口处”,对参数的有效性进行检查。 在函数体的“出口处”,对return语句的正确性和效率进行检查。 4. 函数设计 4.4 一些建议 函数的功能要单一,不要设计多用途的函数。 函数体的规模要小,尽量控制在50行代码之内。 尽量避免函数带有“记忆”功能。相同的输入应当产生相同的输出。带有“记忆”功能的函数,其行为可能是不可预测的,因为它的行为可能取决于某种“记忆状态”。 不仅要检查输入参数的有效性,还要检查通过其他途径进入函数体内的变量的有效性,例如全局变量、文件句柄等。 用于出错处理的返回值一定要清楚,让使用者不容易忽视或误解错误情况。 4.5 使用断言 使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况

文档评论(0)

1亿VIP精品文档

相关文档