




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 程序版式程序版式 1 1 对齐对齐 1 1 1 程序块要采用缩进风格编写 缩进的空格数为 4 个 使用 VC 提供的 Tab 键对齐 1 1 2 和 应独占一行并且位于同一列 同时引用他们的语句对齐 1 1 3 之内的代码块在 右边数格外左对齐 例 正确错误 void Function int x program code void Function int x program code if condition program code else program code if condition program code else program code for initialization condition update program code for initialization condition update program code While condition program code while condition program code 如果出现嵌套的 则使用缩进对齐 如 1 2 空行空行 1 2 1 每个声明之后 每个函数定义之后要加空行 1 2 2 在一个函数体内 逻辑上密切相关的语句之间不加空行 其它地方应加 空行分隔 1 2 3 变量声明和代码之间加空行 1 2 4 函数返回语句用空行 例 void Function1 空行 void Function2 void Function1 空行 void Function2 空行 while condition statement1 空行 if condition statement2 else statement3 空行 Return statement4 1 3 代码行代码行 1 3 1 一行代码只做一件事情 如只定义一个变量 或只写一条语句 1 3 2 if for do while case switch default 等语句自占一行 且 if for do while 等语句的执行语句部分无论多少都要加括号 例 示例 风格良好的代码行示例 风格不良的代码行 int width 宽度 int height 高度 int depth 深度 int width height depth 宽度高度深度 x a b y c d z e f X a b y c d z e f if width height dosomething if width 2000 良好的风格 if year 2000 不良的风格 if a b i 10 i 良好的风格 for i 0 i 10 i 不良的风格 for i 0 I 10 i 过多的空格 x a b a b 良好的风格 x aFunction 不要写成 b Function 1 5 长行拆分长行拆分 1 5 1 代码行最长度宜控制在 70 到 80 个字符以内 代码行不宜过长 1 5 2 长表达式拆分 应将操作符放在新行之首 拆分出新行要适当缩进 使 排版整齐 例 if very longer variable1 very longer variable12 virtual CMatrix CMultiplyMatrix CMatrix leftMatrix CMatrix rightMatrix for very longer initialization very longer condition very longer update dosomething 1 6 修饰的位置修饰的位置 1 6 1 修饰符 和 int x y 1 7 类的版式类的版式 1 7 1 将 public 写前面 protect 在其后 private 写后面 以行为中心 1 7 2 变量在函数声明之后 1 7 3 逻辑相关的函数排列在一起 例 class A public void Func1 void void Func2 void 空行 int i j protect void Func3 void void Func4 void float x y private void Func5 void void Func6 void 空行 string a b 2 代码注释规则代码注释规则 范例文件 2 1 每个文件头每个文件头 2 1 1 阐述该文件包含的内容 2 1 2 对 include 的文件要注释 2 2 每个函数的头部每个函数的头部 2 2 1 注明函数名称 函数说明 输入参数和返回值 2 3 每个类 即头文件 每个类 即头文件 2 3 1 注明类的用途 2 4 函数当中需要注释不易明折的地方函数当中需要注释不易明折的地方 2 4 1 算法 2 4 2 设计思想 2 4 3 独到的用处 2 5 原则原则 2 5 1 注释和代码一样要及时更新 2 5 2 注释不是代码的重复 2 5 3 全部使用 方式注释 2 5 4 注释尽量不要单独占一行 2 5 5 注释要简洁 明了 2 5 6 边写代码边写注释 MFC 自带的代码注释不用修改 2 5 7 对于所有有物理含义的变量 常量 如果其命名不是充分自注释的 在 声明时都必须加以注释 说明其物理含义 变量 常量 宏的注释应放 在其上方相邻位置或右方 2 5 8 将注释与其上面的代码用空行隔开 函数名称 函数说明 输入参数 返 回 值 void Function float x float y float z if while end of while end of if 3 命名规范命名规范 3 1 共性规则共性规则 3 1 1 不可用汉语拼音 用英文 用词应准确 3 1 2 应用大小写混排方式 如 AddChild 3 1 3 程序中不要出现仅靠大小写区分的相似的标识符 3 1 4 程序中不要出现标识符完全相同的简单变量和全局变量 3 1 5 变量名应当使用 名词 或 形容词 名词 如 float fValue float fOldVlaue float fNewValue 3 1 6 函数名应使用动词或动词 名词 如 void GetValue 3 1 7 用正确的反义词组命名具有互斥定义的变量或相反动作的函数 如 int nMinValue int nMaxValue int nSetValue int nGetValue 3 1 8 对于借来的代码 不改变其命名 3 2 命名规则命名规则 3 2 1 类名和函数名用大写字母开头的单词组合而成 如 class Node class LeafNode void SetValue 3 2 2 变量和参数用小写字母开头的单词组合而成 如 BOOF bflag int nDrawMode float fHeight string strTitle char cSource 3 2 3 常量全用大写字母 用下划线分割单词 DDD SAF 3 2 4 静态变量前加前缀 s 如 Static int s initValue 3 2 5 如果不得已需要全局变量 全局变量前加前缀 g 如 int g howManyPeople 3 2 6 类的数据成员加前缀 m 如 void objet Set Value int width int height m width width m height height 3 2 7 适当使用匈牙利命名法 4 程序规范程序规范 4 1 语句语句 4 1 1 对运算符很多的情况下 应该使用括号区分运算的顺序 例如 word high 从左至右 类型 sizeof return y 改写为 if condition return x else return y 或者改写成更加简练的 return condition x y 4 1 3 循环语句 4 1 3 1 在多生循环中 如果有可能 应将最长的循环放在最内层 最短的循环放在最外在多生循环中 如果有可能 应将最长的循环放在最内层 最短的循环放在最外 层 以减少层 以减少 CPUCPU 跨越循环层的次数跨越循环层的次数 例 for row 0 row 100 row for col 0 col 5 col sum sum a row col for col 0 col 5 col for row 0 row 100 row sum sum a row col 4 1 3 2 如果循环体内存在逻辑判断 并且循环次数很大 宜将逻辑判断移到循环体的外如果循环体内存在逻辑判断 并且循环次数很大 宜将逻辑判断移到循环体的外 面面 例 for i 0 i N i if condition DoSomething else DoOtherthing if condition for i 0 i N i DoSomething else for i 0 i 0 pbTo pbFrom return pvTo 4 3 3 2 在函数的在函数的 出口处出口处 应对 应对 returnreturn 语句的正确性和效率进行检查语句的正确性和效率进行检查 4 3 3 3 returnreturn 语句不可返回指向语句不可返回指向 找内存找内存 内部变量 的指针或引用 因为该内存在 内部变量 的指针或引用 因为该内存在 函数体结束时被自动销毁函数体结束时被自动销毁 4 3 3 4 要搞清楚返回的究竟是值 指针 还是引用要搞清楚返回的究竟是值 指针 还是引用 4 3 3 5 如果函数返回值是一个对象 要考虑如果函数返回值是一个对象 要考虑 return 语句的效率语句的效率 4 3 4 通用规则 4 3 4 1 函数的功能要单一 不要设计多用途函数函数的功能要单一 不要设计多用途函数 4 3 4 2 函数体规模要小 尽量控制在函数体规模要小 尽量控制在 100100 行代码以内 不包括注释和空格行行代码以内 不包括注释和空格行 4 3 4 3 尽量避免函数带有记忆功能 相同的输入应当产生相同的输出 不用尽量避免函数带有记忆功能 相同的输入应当产生相同的输出 不用 staticstatic 变量 变量 示例 如下函数 其返回值 即功能 是不可预测的 unsigned int integer sum unsigned int base unsigned int index static unsigned int sum 0 注意 是 static 类型的 若改为 auto 类型 则函数即变为可预测 for index 1 index base index sum index return sum 4 3 4 4 用于出错处理的返回值一定要清楚用于出错处理的返回值一定要清楚 4 3 4 5 引用的规则引用的规则 a 引用被创建时同时被初始化 b 不能有 NULL 引用 引用必须与合法的存储单元关联 c 一旦引用被初始化 就不能改变引用的关系 d 引用的功能主要是传递参数和返回值 C 语言中 函数的参数和返回值的传递方式有三种 值传递 指针传递和引用传递 以下是 值传递 的示例程序 由于 Func1 函数体内的 x 是外部变量 n 的一份拷贝 改变 x 的值不会影响 n 所以 n 的值仍然是 0 void Func1 int x x x 10 int n 0 Func1 n cout n n endl n 0 以下是 指针传递 的示例程序 由于 Func2 函数体内的 x 是指向外部变量 n 的指针 改变该指针的内容将导致 n 的值改变 所以 n 的值成为 10 void Func2 int x x x 10 int n 0 Func2 cout n n endl n 10 以下是 引用传递 的示例程序 由于 Func3 函数体内的 x 是外部变量 n 的引用 x 和 n 是同一个东西 改变 x 等于改变 n 所以 n 的值成为 10 void Func3 int int n 0 Func3 n cout n n endl n 10 对比上述三个示例程序 会发现 引用传递 的性质象 指针传递 而书写方式象 值传递 实际上 引用 可以做的任何事情 指针 也都能够做 为什么还要 引用 这东西 答案是 用适当的工具做恰如其分的工作 指针能够毫无约束地操作内存中的如何东西 尽管指针功能强大 但是非常危险 就 象一把刀 它可以用来砍树 裁纸 修指甲 理发等等 谁敢这样用 如果的确只需要借用一下某个对象的 别名 那么就用 引用 而不要用 指针 以免发生意外 比如说 某人需要一份证明 本来在文件上盖上公章的印子就行了 如果 把取公章的钥匙交给他 那么他就获得了不该有的权利 5 内存管理内存管理 5 1 内存分配方式内存分配方式 有三种分配方式 1 静态存储区分配 内存在编译的时候已经分配好 这块内存在整个运行期 间都存在 例如全局变量 static 变量 2 在栈上创建 执行函数时 函数内部局部变量都在栈上创建 函数执行结 束时 这些存储变量自动被释放 3 从堆上分配 亦称动态内存分配 程序运行时用 malloc 或 new 申请任意多 少的内存 程序员自己负责在何时用 free 或 delete 释放内存 5 2 常见的内存错误常见的内存错误 1 内存分配未成功 却使用了它 对于函数参数 用 asset p NULL 检查 如果是 malloc 或 new 来申请内存 应用 if p NULL 或 if p NULL 来处 理 2 内存分配虽然成功 但是尚未初始化就引用它 内存的默认值并不一定为 空 3 内存分配成功 也初始化了 但越界了 4 忘记了释放内存 造成内存泄漏释放了内存却继续使用它 5 3 规则规则 1 用 malloc 或 new 申请内存后 应立即检查指会值是否为 NULL 防止使用 指针值为 NULL 的内存 2 不要忘记为数组和动脉内存赋值 防止将未被初始化的内存作为右值使用 3 防止数组或指针的下标越界 4 动态内存的申请与释放必须配对 防止内存泄漏 5 用 free 或 delete 释放内存之后 立即将指针设置为 NULL 防止产生 野 指针 野指针的三种来源 A 指针变量被创建时没有初化 B 指针被 free 或 delete 后没有被赋 NULL C 指针不在有效期 6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国家居建材行业市场深度调研及前景趋势与投资研究报告
- 医疗AI在数据驱动时代的伦理与隐私探讨
- 全球化背景下的文学比较-洞察阐释
- macOS平台跨平台框架探究-洞察阐释
- 情绪调节干预与行为改变-洞察阐释
- 多场耦合优化方法研究-洞察阐释
- 俯冲带流体迁移与成矿-洞察阐释
- 8K电视技术的研发与挑战-洞察阐释
- 医疗器械保养与故障排除技巧
- 医疗园区内多学科协同服务模式研究
- 2020-2024年安徽省初中学业水平考试中考道德与法治试卷(5年真题+答案解析)
- 生物质燃气利用的市场前景
- 中等职业学校信息技术课程标准(2020年版)(文本精排版)
- 小型货物提升机的设计
- GA/T 2015-2023芬太尼类药物专用智能柜通用技术规范
- 埃里克森的人格发展八阶段
- 志愿服务证明(多模板)
- 职业生涯规划家庭影响因素
- 洁净环境监测课件
- Python数据分析与应用-从数据获取到可视化(第2版)课件 第3章 数据分析库pandas基础
- 疼痛科护理的现状与发展趋势
评论
0/150
提交评论