
linxC语言编程规范.doc
15页封面作者: PanHongliang仅供个人学习C 语言编程规范1 序言 51.1 写作目标 51.2 适用范围 51.3 读者范围 51.4 参考资料 51.5 名词解释 52 可读性和可维护性 72.1 命名规则 72.1.1 文件命名 72.1.2 函数命名 72.1.3 变量命名 72.1.4 数据类型命名 82.1.5 宏定义和枚举的取值 92.1.6 标准宏定义 102.2 空白的填充 102.2.1 空白行分割规则 102.2.2 空格分割规则 102.2.3缩进规则 112.3 注释规则 113 文件的组织 133.1 源文件组织 133.1.1 文件头 133.1.2 头文件的包含 143.1.3 常量、宏、 Typedefs 的定义 143.1.4 全局、静态变量的定义 143.1.5 静态函数类型的声明 153.1.6 函数体的排列顺序 153.2 头文件组织 153.2.1 文件头 153.2.2 防止头文件的嵌套包含 163.2.3适应 C++ 规则的声明方法 163.2.4常量、宏、 Typedefs 的定义 163.2.5 变量、函数的声明 164 函数的组织 174.1 函数头的格式 174.2 函数类型的定义 184.3 变量的定义 185 一般语法描述 195.1 条件判断语句 195.2 分支语句 205.3 无条件跳转语句 205.4 表达式 205.5 结构 216 附录 226.1 C 源文件示例: 226.2 H 头文件示例: 221 序言1.1 写作目标 文档所包含的编码规范是在中、大规模的软件开发工程中实际使用过的。
撰写这份 文档的目的是为了在软件开发工作中具有相同格式的统一规范这份规范的执行将大大提 高代码的可维护性、完整性、可移植性、可读性1.2 适用范围 这份文档指明了公司内部所有软件工程的代码开发框架文档仅仅适用于使用 C 语言 的软件开发工作中在读本文档之前读者应具备相当熟练 C 语言开发的工作经验,以至于读者看本文档时不需要任何额外的 C 语言知识本文档提供下列内容:C 文件及函数的组织内容 变量、数据类型、函数的命名规范 结构、变量的分布、注释书写方法 提高 C 语言代码的可读性及编码效率1.3 读者范围这份编码规范适用于所有在 IPTV 软件部工作的软件设计工作者、软件开发工作者1.4 参考资料下面列出的是一些相关的参考文档:The C Programming Language: ANSI C Version, Brian W. Kernighan, Dennis M.Ritchie,Prentice Hall, 1988.1.5 名词解释coding standards 编码规范Naming conventions 命名规则comments 注释file organization 文件组织function organization 函数组织API Application Program Interface ,应用程序接口Enum Enumerator ,枚举Const int Constant Integer ,整形常量CVS Concurrent Versions System (11) ,一种源代码版本控制软件2 可读性和可维护性这个章节描述了增强 C 源代码的可读性和可维护性的方法。
内容包括: 不同类型变量、宏、数据类型、文件、函数的命名差异 空白的填充 注释书写方法2.1 命名规则文件、函数、常量、变量的命名应当采用有意义的名称定义,只有这样才能提高可读性下 面将列出一般的命名方法:选择唯一的并且能够准确、明了的表示出变量用途的名称 单词之间使用下划线符号连接避免使用容易引起歧意的名称缩写例如:缩写“ inch ”有可能会被误认为“ input character ”,所以如果要表示“ input character ”,则使用 in_char 的缩写会比较好 些必须保证所使用名称的唯一性,而不要试图依赖字母大小写来区别不同的名称 不允许变量名和 typedef 使用相同的名称,这样将引起不必要的混淆2.1.1文件命名文件名采用MS-DOS的8.3短文件名格式,且所有字符均为小写 C和H文件的扩展名分别为*.c和*.h为文件命名时应尽量保证整个工程中的唯一性,应使用其所属’模块名 _'作为前缀(模块名的长度不超过 2 至4 个字符) 如:oam_alarm.cbri_extn.h2.1.2函数命名所有函数名称均采用大小写字符,单词间以大写字母区分为全局函数或 API 命名时,应使用其所属'模块名 _'作为前缀(模块名的长度不超过 2至4 个字符)。
如: U16 HIP_GetSlotInfo(void) /* global HIP API function */为静态函数(如: static functions )命名时,应在该函数类型声明前使用 static 关键 字如: static U8 GetNumOfBrds(void) /* static function */2.1.3变量命名下面所列出的是不同类型变量的命名规则: 变量全部采用小写类型缩写 +大小写字母命名方式,单词间以大写字母区分如: ucLowerCase 指针变量类型缩写前要 +' p',多级指针变量前+' p'的个数与指针级数对应;函数指 针变 量前要 +' pf '如:void * pVoid U8 **ppcValue 变量类型缩写如下Array aPonit pU8 ucS8 cU16 usS16 sU32 ulS32 lBOOL bstruct stunion uenum e为全局变量命名时,应使用’g_'作为前缀如: g_sLowerCase 为静态变量命名时,应使用’s_'作为前缀,并以static 关键字修饰 如: static U8 * s_plLowerCase 。
全局变量不要被外部模块之间访问,应该通过函数方式进行存取控制,所有之间访问全 局变量的代码均被视为不良代码2.1.4数据类型命名这里主要描述typedef 和enum两种类型的命名规则下面所列的是基本数据类型如果需要另外扩充数据类型,则应在这些基本数据类型基 础上进行至于 Standard C 保留的数据类型我们将不使用如: char, int, short, long U8 unsigned 8-bitS8 signed 8-bitU16 unsigned 16-bitS16 signed 16-bitU32 unsigned 32-bitS32 signed 32-bitBOOL Boolean注意:BOOL类型是新增的数据类型,采用 typedef U32 的格式定义的 所有上面定义的数据类型都应在具体工程中的一个全局性的公共头文件中定义所有使用 typedef 形式定义的 为前缀如:typedef struct{U8 b } TName, *PTName 所有使用 typedef 形式定义的如:typedef union{U8 b U16 a } UName 所有使用 typedef 形式定义的struct 数据结构名称将使用'union 数据结构名称将使用'enum 数据结构名称将使用'T'(或’PT'指针类型)作U'作为前缀。
E'作为前缀如:typedef enum{FM_INVALID_CODE,FM_INVALID_SLOT_ID,} EName 所有使用typedef形式定义的函数指针名称将使用’ PF'作为前缀如: Typedef void (*PFTaskEnty)(void) 2.1.5宏定义和枚举的取值所有宏名, const 变量名和 enum 方式定义的常量名均采用大写字符,单词间以' _'区 分预编译宏定义前 +' _'尽量避免直接使用数字常量(硬编码),取而代之的是用宏 (#define) , const 和 enum 方 式定义常量值如:#define SLOT 1const U16 MAX_SLOT_NUMBER = 16 enum{RV_OK,RV_NO_MEM,RV_TIMEOUT,}1) . 避免在不同文件中使用相同的常量名全局常量应声明在全局的公共头文件中2) . 首选使用 const 类型定义替代宏定义因为 const 类型定义将有利于编译器进行类型 检查2.1.6标准宏定义标准宏定义(如: TRUE/FALSE SUCCESS/FAILURE等)应该定义在全局的系统头文件中。
这些宏的具体值为:#define TRUE 1#define FALSE 0#define OK 1#define NG 0#define SUCCESS 0#define FAILURE -12.2 空白的填充2.2.1空白行分割规则空白行的使用可以增加源代码中的可读性,但过多的使用会造成源代码冗长可读性下降 种比较好的方法是使用空白行分割源代码中的不同部分和相对独立的程序块 如:#define LOWER 0#define UPPER 300#define STEP 10/* 此处增加一行空白 */ void main(void){U8 x /* 此处增加一行空白 *//* 打印字符串处理部分 *//* 此处增加一行空白 */for (.. .. ){printf( …)}} /* end of MAIN */2.2.2空格分割规则if ,while , for 关键词后加一个空格如: while (1 ) 二元操作符前后加一个空格如: wCount += GAP 逗号后应跟一个空格如: concat(s1, s2) ‘ ( '后不加空格‘) '、' , '、''前不加空格;但当‘。
'在 for 循环比较语句中后应跟一个空格 一元操作符前后不加空格‘[] ' 、' . '、' -> '前后不加空格如:好的空格使用方法:*average = *total / *count /* compute the average */注意:各个符号之间都有空格,如 = 号左右两边不良的空格使用方法:*average=*total/*count /* compute the average */注意:编译器会将 /* 作为注释的开始,而不会分别当做除号和指针标识符来对待2.2.3缩进规则使用 0,4 缩进格式,形式如下:if ( …){ /* 大括号另起一行 */x = y + z }禁止使用 TAB 键,缩进为 4 个空格‘{‘、' } '独占一行,成对对其不缩进2.3 注释规则 在源代码中添加注释将能使阅读者轻松阅读并提高效率 从用途来分,注释级别分为:文。
