您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 安富莱C语言编码规范
安安富富莱莱电电子子UUMM110011日日版版本本::11..11第第11页页共共1177页页安安富富莱莱CC语语言言编编码码规规范范11..11文文件件与与目目录录(1)文件及目录的命名规定可用的字符集是[A-Z;a-z;0-9;._-]。(2)源文件名后缀用小写字母.c和.h。(3)文件的命名要准确清晰地表达其内容,同时文件名应该精练,防止文件名过长而造成使用不便。在文件名中可以适当地使用缩写。以下提供两种命名方式以供参考:各程序模块的文件命名开头2个小写字母代表本模块的功能:如:主控程序为mpMain.c,mpDisp.c…不写模块功能标识:如:主控程序为Main.c,Disp.c…(4)一个软件包或一个逻辑组件的所有头文件和源文件建议放在一个单独的目录下,这样有利于查找并使用相关的文件,有利于简化一些编译工具的设置。(5)对于整个项目需要的公共头文件,应存放在一个单独的目录下(例如:myProject/include)下,可避免其他编写人引用时目录太过分散的问题。(6)对于源码文件中的段落安排,我们建议按如下的顺序排列:文件头注释防止重复引用头文件的设置#include部分#define部分enum常量声明类型声明和定义,包括struct、union、typedef等全局变量声明文件级变量声明安安富富莱莱电电子子UUMM110011日日版版本本::11..11第第22页页共共1177页页全局或文件级函数声明函数实现。按函数声明的顺序排列文件尾注释(7)在引用头文件时,不要使用绝对路径。如果使用绝对路径,当需要移动目录时,必须修改所有相关代码,繁琐且不安全;使用相对路径,当需要移动目录时,只需修改编译器的某个选项即可。例如:#include“/project/inc/hello.h”/*不应使用绝对路径*/#include“../inc/hello.h”/*可以使用相对路径*/(8)在引用头文件时,使用来引用预定义或者特定目录的头文件,使用“”来引用当前目录或者路径相对于当前目录的头文件。#includestdio.h/*标准头文件*/#includeprojdefs.h/*工程指定目录头文件*/#include“global.h”/*当前目录头文件*/#include“inc/config.h”/*路径相对于当前目录的头文件*/(9)为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。#ifndef__DISP_H/*文件名前名加两个下划线“__”,后面加“_H”#define__DISP_H......#endif(10)头文件中只存放“声明”而不存放“定义”,通过这种方式可以避免重复定义。/*模块1头文件:module1.h*/externinta=5;/*在模块1的.h文件中声明变量*//*模块1实现文件:module1.c*/uint8_tg_ucPara;/*在模块1的.h文件中定义全局变量g_ucPara*/(11)如果其它模块需要引用全局变量g_ucPara,只需要在文件开头包含module1.h/*模块2实现文件:module2.c*/#include“module1.h”/*在模块2中包含模块1的.h文件*/安安富富莱莱电电子子UUMM110011日日版版本本::11..11第第33页页共共1177页页......g_ucPara=0;......(12)对于文件的长度没有非常严格的要求,但应尽量避免文件过长。一般来说,文件长度应尽量保持在1000行之内。11..22排排版版(1)程序块要采用缩进风格编写,缩进的空格数为4个。(2)相对独立的程序块之间、变量说明之后必须加空行。voidDemoFunc(void){uint8_ti;----局部变量和语句间空一行/*功能块1*/for(i=0;i10;i++){...}----不同的功能块间空一行/*功能块2*/for(i=0;i20;i++){...}}(3)较长的语句或函数过程参数(80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。if((ucParam1==0)&&(ucParam2==0)&&(ucParam3==0)||(ucParam4==0))----长表达式需要换行书写{......}安安富富莱莱电电子子UUMM110011日日版版本本::11..11第第44页页共共1177页页(4)不允许把多个短语句写在一行中,即一行只写一条语句。rect.length=0;rect.width=0;----不正确的写法rect.length=0;----正确的写法rect.width=0;(5)对齐使用TAB键,1个TAB对应4个字符位。(6)函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。(7)程序块的分界符(如大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。对于与规则不一致的现存代码,应优先保证同一模块中的风格一致性。for(...){----不规范的写法.../*programcode*/}for(...){----规范的写法.../*programcode*/}if(...){----不规范的写法.../*programcode*/}if(...){----规范的写法.../*programcode*/}安安富富莱莱电电子子UUMM110011日日版版本本::11..11第第55页页共共1177页页(8)在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如-),后不应加空格。说明:采用这种松散方式编写代码的目的是使代码更加清晰。由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在C语言中括号已经是最清晰的标志了。在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留两个以上空格。示例:逗号、分号只在后面加空格。int_32a,b,c;比较操作符,赋值操作符=、+=,算术操作符+、%,逻辑操作符&&、&,位域操作符、^等双目操作符的前后加空格。if(current_time=MAX_TIME_VALUE)a=b+c;a*=2;a=b^2;!、~、++、--、&(地址运算符)等单目操作符前后不加空格。*p='a';/*内容操作*与内容之间*/flag=!isEmpty;/*非操作!与内容之间*/p=&mem;/*地址操作&与内容之间*/i++;/*++,--与内容之间*/-、.前后不加空格。p-id=pid;/*-指针前后不加空格*/if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显,函数名与其后安安富富莱莱电电子子UUMM110011日日版版本本::11..11第第66页页共共1177页页的括号之间不加空格,以与保留字区别开。if(a=b&&cd)11..33注注释释(1)一般情况下,源程序有效注释量必须在20%以上。说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。(2)在文件的开始部分,应该给出关于文件版权、内容简介、修改历史等项目的说明。具体的格式请参见如下的说明。在创建代码和每次更新代码时,都必须在文件的历史记录中标注版本号、日期、作者、更改说明等项目。其中的版本号的格式为两个数字字符和一个英文字母字符。数字字符表示大的改变,英文字符表示小的修改。如果有必要,还应该对其它的注释内容也进行同步的更改。注意:注释第一行星号要求为76个,结尾行星号为1个。/*****************************************************************************Copyright(C),2010-2011,武汉汉升汽车传感系统有限责任公司*文件名:main.c*内容简述:**文件历史:*版本号日期作者说明*01a2010-07-29王江河创建该文件*01b2010-08-20王江河改为可以在字符串中发送回车符*02a2010-12-03王江河增加文件头注释*/(3)对于函数,在函数实现之前,应该给出和函数的实现相关的足够而精练的注释信息。内容包括本函数功能介绍,调用的变量、常量说明,形参说明,特别是全局、全程或静态变量(慎用静态变量),要求对其初值,调用后的预期值作详细的阐述。具体的书写格式和包含的各项内容请参见如下的例子。示例:安安富富莱莱电电子子UUMM110011日日版版本本::11..11第第77页页共共1177页页下面这段函数的注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。/*****************************************************************************函数名:SendToCard()*功能:向读卡器发命令,如果读卡器进入休眠,则首先唤醒它*输入:全局变量gaTxCard[]存放待发的数据*全局变量gbTxCardLen存放长度*输出:无*/(4)边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。(5)注释的内容要清楚、明了,含义准确,防止注释二义性。说明:错误的注释不但无益反而有害。注释主要阐述代码做了什么(What),或者如果有必要的话,阐述为什么要这么做(Why),注释并不是用来阐述它究竟是如何实现算法(How)的。(6)避免在注释中使用缩写,特别是非常用缩写。说明:在使用缩写时或之前,应对缩写进行必要的说明。(7)注释应与其描述的代码靠近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。示例:如下例子不符合规范。例1:不规范的写法/*获取复本子系统索引和网络指示器*/----不规范的写法,此处不应该空行repssn_ind=ssn_data[index].repssn_index;repssn_ni=ssn_data[index].ni;例2:不规范的写法repssn_ind=ssn_data[index].repssn_index;repssn_ni=ssn_data[index].ni;/*获取
本文标题:安富莱C语言编码规范
链接地址:https://www.777doc.com/doc-4656077 .html