《C编程风格培训》PPT课件.ppt

上传人:公**** 文档编号:567677904 上传时间:2024-07-22 格式:PPT 页数:59 大小:409.01KB
返回 下载 相关 举报
《C编程风格培训》PPT课件.ppt_第1页
第1页 / 共59页
《C编程风格培训》PPT课件.ppt_第2页
第2页 / 共59页
《C编程风格培训》PPT课件.ppt_第3页
第3页 / 共59页
《C编程风格培训》PPT课件.ppt_第4页
第4页 / 共59页
《C编程风格培训》PPT课件.ppt_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《《C编程风格培训》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《C编程风格培训》PPT课件.ppt(59页珍藏版)》请在金锄头文库上搜索。

1、C+编程风格培训东信北邮信息技术有限公司培训目的熟练掌握基本的C+编程规范正确使用C+语言的特性了解一些基本的C+的编程技巧内容简介文件结构程序版式基本命名规则表达式和基本语句函数设计内存管理C+的特性其他的一些注意事项文件结构基本概念(文件结构 )每个C+/C程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。C+/C程序的头文件以“.h”或“.hpp”为后缀,C程序的定义文件以“.c”为后缀,C+程序的定义文件通常以“.C”为后缀(也有一些系统以”.cpp

2、”,“.cc”或“.cxx”为后缀)。版权和版本申明(文件结构)/* /* * * Copyright(CCopyright(C) 2000 EASTCOM-BUPT Inc.) 2000 EASTCOM-BUPT Inc. * * * Filename : * Filename : smapcommand.hsmapcommand.h * Description : header file of * Description : header file of smapcommand.Csmapcommand.C * * * Author : Li * Author : Li WeiWei *

3、* * History : 2000-07-24 Created * History : 2000-07-24 Created * * */ */头文件的结构(文件结构)为了防止头文件被重复引用,应当用为了防止头文件被重复引用,应当用ifndef/define/endififndef/define/endif结构产生预处理块。结构产生预处理块。用用 #include #include 格式来引用标准库的头格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。文件(编译器将从标准库目录开始搜索)。 用用 #include “#include “filename.hfilename.h” ”

4、格式来引用非标准格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜库的头文件(编译器将从用户的工作目录开始搜索)。索)。 头文件中只存放头文件中只存放“ “声明声明” ”而不存放而不存放“ “定义定义” ” 不提倡使用全局变量。不提倡使用全局变量。 定义文件的结构(文件结构)# #ifndefifndef GRAPHICS_HGRAPHICS_H / / 防止防止graphics.hgraphics.h被重复引用被重复引用#define#define GRAPHICS_HGRAPHICS_H#include #include / / 引用标准库的头文件引用标准库的头文件#include

5、 “#include “myheader.hmyheader.h” ” / / 引用非标准库的头文件引用非标准库的头文件void Function1();void Function1();/ / 全局函数声明全局函数声明class Boxclass Box / / 类结构声明类结构声明 ; ;# #endifendif目录结构 如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分别保存于不同的目录,以便于维护。例如可将头文件保存于include目录,将定义文件保存于source目录(可以是多级目录)。 如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声

6、明”。为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。 程序版式 空行 (程序版式)在每个类声明之后、每个函数定义结束之后都要加空行 。在一个函数体内,逻辑上密切相关的语句之间不加空行,其它地方应加空行分隔 。空行 (程序版式)/ / 空行空行void Function1()void Function1() / / 空行空行void Function2()void Function2() / / 空行空行void Function3()void Function3() 空行 (程序版式)/ / 空行空行while (condition)while (condition) st

7、atement1;statement1;/ / 空行空行if (condition) if (condition) statement2;statement2; elseelse statement3;statement3; / / 空行空行statement4;statement4; 代码行 (程序版式)一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。 if、for、while、do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加。这样可以防止书写失误。 尽可能在定义变量的同时初始化该变量 代码行 (程序版式)/ /风格一风格一if

8、 (width height) if (width height) dosomethingdosomething();(); / /风格二风格二if (width height)if (width =variable12) & (variable3 = variable14) & (variable5 draw();box-draw();/ / 类的成员函数类的成员函数命名规则类名用大写字母开头的单词组合而成。例如:class Node;/ 类名class LeafNode;/ 类名函数名用小写字母开头的单词组合而成。void draw(void);/ 函数名void setValue(int

9、 value);/ 函数名 命名规则变量和参数用小写字母开头的单词组合而成。例如:BOOL flag;int drawMode; 常量全用大写的字母,用下划线分割单词。例如:const int MAX = 100;const int MAX_LENGTH = 100; 命名规则静态变量加前缀s_(表示static)。 如果不得已需要全局变量,则使全局变量加前缀g_(表示global)。 类的数据成员加前缀m_(表示member),这样可以避免数据成员与成员函数的参数同名。 表达式和基本语句 if 语句 (表达式和基本语句 )不可将布尔变量直接与TRUE、FALSE或者1、0进行比较。 if (

10、flag) / 表示flag为真if (!flag) / 表示flag为假if 语句 (表达式和基本语句 )应当将整型变量用“=”或“!=”直接与0比较。 假设整型变量的名字为value,它与零值比较的标准if语句如下:if (value = 0) if (value = 0) if (value != 0)if (value != 0)不可模仿布尔变量的风格而写成不可模仿布尔变量的风格而写成if (value)if (value)/ / 会让人误解会让人误解 valuevalue是布尔变量是布尔变量if (!value)if (!value)if 语句 (表达式和基本语句 )不可将浮点变量用

11、“=”或“!=”与任何数字比较,应该设法转化成“=”或“=-EPSINON) & (x=-EPSINON) & (x=EPSINON)其中其中EPSINONEPSINON是允许的误差(即精度)。是允许的误差(即精度)。 if 语句 (表达式和基本语句 )应当将指针变量用“=”或“!=”与NULL比较。 比如:char *p=NULL;if (p!=NULL) delete p;switch语句(表达式和基本语句 ) 每个case语句的结尾不要忘了加break,否则将导致多个分支重叠(除非有意使多个分支重叠)。 不要忘记最后那个default分支。即使程序真的不需要default处理,也应该保留

12、语句 switch语句(表达式和基本语句 ) int value;int value;.switch (value)switch (value) 1: 1:break;break; 2: 2: . . . . default : default : 函数设计参数的设计(函数设计)一个函数的代码短的行数不应该超过80行,如果超过了,这个函数的设计存在一定问题。 避免函数有太多的参数,参数个数尽量控制在5个以内。如果参数太多,在使用时容易将参数类型或顺序搞错。 返回值的规则 (函数设计)不要省略返回值的类型。 不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return语句返

13、回。 内存管理内存管理从静态存储区域分配。内存在程序编译的从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,个运行期间都存在。例如全局变量,staticstatic变量。变量。在栈上创建。在执行函数时,函数内局部在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。执行结束时这些存储单元自动被释放。从堆上分配,亦称动态内存分配。程序在从堆上分配,亦称动态内存分配。程序在运行的时候用运行的时候用mallocmalloc或

14、或newnew申请任意多少的申请任意多少的内存,程序员自己负责在何时用内存,程序员自己负责在何时用freefree或或deletedelete释放内存。释放内存。内存分配方式(内存管理)内存分配方式(内存管理)常见的内存错误及其对策 用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。 不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。常见的内存错误及其对策动态内存的申请与释放必须配对,防止内存泄漏。 用free或delete释放了内存之后,立即将指针设置为NU

15、LL,防止产生“野指针”。new和 delete,以及malloc和free必须配套使用,不可混用。如果对一个空指针进行free或delete操作,系统不会报错,程序也不会异常终止。常见的内存错误及其对策内存拷贝函数memcpy要慎用比如:char str210=“hello lg”;char str16;int i=1;memcpy(str1,str2,10); 动态内存会被自动释放吗? void Func(void)char *p = (char *) malloc(100);/ 动态内存会自动释放吗?内存耗尽怎么办? 判断指针是否为NULL,如果是则马上用return语句终止本函数。 判

16、断指针是否为NULL,如果是则马上用exit(1)终止整个程序的运行。 为new和malloc设置异常处理函数。 例如可以用set_new_hander函数 C+的特性 类的构造和析构函数类的成员变量初始化应该尽量放在构造函数中进行;类的析构函数中应该释放所有在该类的中分配的动态内存; 类的构造和析构函数比如:比如:ClassAClassA的的declarationdeclaration如下:如下:class class ClassAClassA public:public:ClassAClassA();(); ClassAClassA();();private:private:int dis

17、trubutr1;int distrubutr1;bool bool ifInitialifInitial; ;char *bufferchar *buffer;; ;类的构造和析构函数ClassAClassA的的definitiondefinition如下:如下:ClassA:ClassAClassA:ClassA() () distrubutr1=0; distrubutr1=0; ifInitialifInitial=true;=true;p=NULL;p=NULL; ClassA:ClassAClassA:ClassA() () delete buffer; delete buffer

18、; 其他特性函数和运算符重载OverrideInline的使用拷贝构造函数继承和组合Const的使用其他的一些注意事项其他的一些注意事项当心那些视觉上不易分辨的操作符发生书写错误。我们经常会把“”误写成“”,象“|”、“&”、“=”这类符号也很容易发生“丢1”失误。然而编译器却不一定能自动指出这类错误。变量(指针、数组)被创建之后应当及时把它们初始化,以防止把未被初始化的变量当成右值使用。 其他的一些注意事项当心数据类型转换发生错误。尽量使用显式的数据类型转换(让人们知道发生了什么事),避免让编译器轻悄悄地进行隐式的数据类型转换。 当心变量发生上溢或下溢,数组的下标越界。 当心忘记编写错误处理程序,当心错误处理程序本身有误。 其他的一些注意事项避免编写技巧性很高代码。 不要设计面面俱到、非常灵活的数据结构。 如果原有的代码质量比较好,尽量复用它。但是不要修补很差劲的代码,应当重新编写。 如果你是对于其他人编写的代码进行修改,应该尽量按照原有的代码编写风格修改代码。推荐网址www.gnu.org有一些有用的书籍和源码推荐书籍和工具推荐C+源码的阅读工具SourceInsight推荐书籍:高质量C+编程指南C+编程思想谢谢问题?我的信箱:我的信箱:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号