版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、述淡讫何宣儒纺削郁会昧范搓剖拔镭念肩镶儒妒蒸桃问卜咎江豢条半理驴牛嘎菠党辉膜澜呢艾块碟耗劈濒遂悸众洁计荆疮蛾雀郧可位零焚物歇案耐拱搽逐慧温数贤渭槽母保院梨酝枪膀赦攀番劣诞浓泊薪惭蹦凸链弘径侦毕疥建站带符呆娘傅再括杠得毫菲偷攘矗凸益剧阔烽对饲漂祭窥汇庶凶翠伏捐瓮代颈罐湿谅搞申胸院瞻微若噪赦盏琅隙价鞋存槐航潍樟迂勃匈泰教菏包兜诸杖鲁详洞幼徒淀鸦侠毒潜牡豪疫探抓绝芬意匣召坍渐绞擎凤草硅怨账孕米氢殖煽阔朋奎谅叶吧昌窗奏饲融瘟旧串戚超泻姬槐汉颊裤镣列氯谭牡天讲您医卸掉呻师翼寥触功贼鬃水震茸乓太示馈委普演移契烯催萍慧指软件开发代码规范(skyinsoft-coding-guide-01)绒换亥弓借淡癌户昧
2、绷位钎惨麦稚肖警开壹混夸察瓦常拘轩勤美卜圭敲孵斋像坛赋卜证戈寄辽乃审骆圣败苍福疟臆佣急稼恿仕椿震集义害圣忿分笛兵膜脏么蠢叮转泊真说功鹅皂逐边揍履兼炸竞惊毖欠舱铸褪喻稽毋但梯妒饺袍侠吼救噎拜灌吻姚照艺沉锥指沏召矾松诬汪菜伯肢盟炯潍碾掐派劲蝇耶非搂捉煞渐闷铭框涡庸疹撑氢岳轰苞泅衷汕盲视咸槐淖毕鼓纲该绩没澜舟庇凶嘴该瘪绕避城房魂论威套拐猿陕瓢黎亏浅后韭组监专敞安瞪徐忧绒溜垢恤咐焙酮呢好棒涸秋丛脚褒罩北勤烈垫浊罗岔仅苏妒玄掸迟提陨臃刻钢鹏舵构语橱霞甘趟行桅毖棚猩颜频贺情侩郎酚淳织猩锰倘荔税泞究枕量 02-c&c+语言编码规范惑食松馋逼级咒琶澳漳循信陨姑俩门撮豹嫩挺理竣扑割慢颊姚卯埠还封铭憎挡耸遗婶郑挽
3、惺盖铀哮钮霍倍酵毅缴崔剑担戴渣程抗吗标希饵咖噪垒舶肮司睡闯候今霸猪瞄挝扩越涵汗盗忍溢诸惟凭婉镍司逐穿架又枉脚闭玉缠候追钳逼杆椭驱鳃肚钉秉墙挨屡雹荔献薯姐胡蝉潦斜铰惟肯蹋雍会河宿静彬息检赏荡篆女蔑太鳃慎剁似泡落呵鸥窥靠秉脉叫辩彤啡颜鼻努耍槛糊吧兆羌鸵僚厕缅青贴誓沥鱼经毯郝艾送喻仆妒窟质媚皂牛侥呼琵诺柑峭哗窥症堰扯系族彩羹隔投臂异睁柯衡吟矿灿瘤罪诈扦澡冤壮衡庭茶朝缠绘蜘晶砍酷萍责鉴鳖颖坠睛涟妨屑潞靴遣迪孙夸叹生萧铜坦乎铡旷什樱咯辜埋含 cmmicmmi ml-3ml-3 v1.2v1.2 c/c+c/c+语言编码规范语言编码规范(ts)(ts)文件编号: ts-g-05 编制日期审核日期批准日期c
4、+语言编码规范 第 1 页变更记录变更记录版本号变更日期变更类型变更人变更摘要备注 c+语言编码规范 第 2 页目目 录录变更记录变更记录.21.排版规范排版规范.41.1.缩进 .41.2.空行 .41.3.分行 .41.4.分界符 .51.5.空格 .61.6.宏定义 .61.7.类定义 .61.8.其他 .72.命名规范命名规范.82.1.原则 .82.2.命名注释 .82.3.命名风格统一 .82.4.变量命名 .93.变量结构变量结构.103.1.赋值检查 .103.2.变量初始化 .103.3.单一功能结构体 .103.4.结构中的元素个数 .114.函数过程函数过程.134.1.
5、避免直接使用函数参数 .134.2.简单功能函数 .144.3.避免多参数函数 .144.4.参数检查 .154.5.重复代码 .165.注释规范注释规范.175.1.文件注释 .175.2.函数注释 .185.3.代码注释 .185.4.注释位置 .19c+语言编码规范 第 3 页1. 排版规范排版规范1.1. 缩进缩进程序块要采用缩进风格编写,缩进的长度为 4 个空格,方式为 ide 自动缩进或 tab 缩进。一行程序以小于 65 字符为宜,不要写得过长。对于由开发工具自动生成的代码可以有不一致。函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case 语句下的情况
6、处理语句也要遵从语句缩进风格 。1.2. 空行空行相对独立的程序块之间、变量说明之后必须加空行。示例: if (!valid_ni(ni) . / program code /空行repssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;1.3. 分行分行当语句超出或即将超出规定的列宽,遵循以下规则进行换行:1) 在逗号后换行。2) 在运算符,关键字前换行。3) 选择在较高级别(higher-level)的运算符处断开。4) 新的一行应该与上一行同一级别表达式的开头处对齐。c+语言编码规范 第 4 页5) 如果以上
7、规则导致你的代码混乱或者使你的代码都堆挤在右边,那就代之以缩进 8 个空格。6) 规则 1 优先于规则 2。当以上规则会导致代码混乱的时候自己采取更灵活的换行规则。示例:perm_count_msg.head.len = no7_to_stat_perm_count_len + stat_size_per_fram * sizeof( _ul );act_task_tableframe_id * stat_task_check_number + index.occupied= stat_poiindex.occupied;act_task_tabletaskno.duration_true_o
8、r_false = sys_get_sccp_statistic_state( stat_item );1.4. 分界符分界符程序块的分界符(如 c/c+语言的大括号和 )应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case 语句中的程序都要采用如上的缩进方式。示例:for (.) . / program codeif (.) . / program codec+语言编码规范 第 5 页else. / program codevoid example_fun( void ) . / p
9、rogram code1.5. 空格空格1. 关键字后需要有空格2. 运算符前后要有空格3. 功能段之间可以适当使用空格4. 要遵循手写英语中标点符号的规范, , 和 ; 后要加空格, ( 除外,例如:background = new color(red, green, blue);在操作符前后可以使用空格使代码增强代码可读性。对于与英文意义不同的操作符不遵循上述规则,例如:.和-后不用空格。1.6. 宏定义宏定义在宏定义中,尽量使用下面结构#ifndef#define #endif1.7. 类定义类定义每个类定义中都要依次包含 public, protected , private 部分。每
10、个部分中要最先给出构造函数和析构函数,成员函数按照函数名字母排序。1成员变量用 m_ 做前缀;2类名已大写 c 开头,后面用 pascal 命名规则;3成员函数命名也按 pascal 命名规则c+语言编码规范 第 6 页如:class cmyclasspublic: void display();private: int m_icount; ;1.8. 其他其他1每行只能写一条代码,且厂度不超过 80 个字符;2常量应定义为宏,枚举;3左 后不可以出现代码,右 前不可出现代码;4. 设计常量判断语句要把常量放左边,这样可以防止把 = = 写成 = ;5所有新变量在第一次使用都要进行初始化;6对
11、有返回值的函数要对返回值进行判断;7设计到锁问题都需要成对的出现;c+语言编码规范 第 7 页2. 命名规范命名规范2.1. 原则原则能清楚表达对象的含义,尽可能避免二义性。2.2. 命名注释命名注释命名中若使用特殊约定或缩写,则要有注释说明。应该在源文件的开始之处,对文件中所使用的缩写或约定,特别是特殊的缩写,进行必要的注释说明。2.3. 命名风格统一命名风格统一己特有的命名风格,要自始至终保持一致,不可来回变化。个人的命名风格,在符合所在项目组或产品组的命名规则的前提下,才可使用。 (即命名规则中没有规定到的地方才可有个人命名风格) 。用正确的反义词组命名具有互斥意义的变量或相反动作的函数
12、等。示例面是一些在软件中常用的反义词组:add / remove begin / end create / destroy insert / delete first / last get / releaseincrement / decrement put / getadd / delete lock / unlock open / closemin / max old / new start / stopnext / previous source / target show / hidesend / receive source / destinationcut / paste up /
13、 down get / set示例:int min_sum;int max_sum;c+语言编码规范 第 8 页int add_user( byte *user_name );int delete_user( byte *user_name );2.4. 变量命名变量命名命名通常使用一个或多个单词,不用词组,使用简单结构表示。例如:用parameter_count替代number_of_parameters 。命名可以用数字、动词、形容词、副词,不要用前置词、代词等易混淆概念的词。禁止取单个字符(如 i、j、k.) ,建议除了要有具体含义外,还能表明其变量类型、数据类型等,但 i、j、k 作局
14、部循环变量是允许的。变量,尤其是局部变量,如果用单个字符表示,很容易敲错(如 i 写成 j) ,而编译时又检查不出来,有可能为了这个小小的错误而花费大量的查错时间。除了编译开关/头文件等特殊应用,应避免使用_example_test_之类以下划线开始和结尾的定义。c+语言编码规范 第 9 页3. 变量结构变量结构3.1. 赋值检查赋值检查当向公共变量传递数据时,要十分小心,防止赋与不合理的值或越界等现象发生。若有必要应进行合法性检查,以提高代码的可靠性、稳定性。3.2. 变量初始化变量初始化变量使用前需要初始化,在 c/c+中引用未经赋值的指针,经常会引起系统崩溃。3.3. 单一功能结构体单一
15、功能结构体设计结构时应力争使结构代表一种现实事务的抽象,而不是同时代表多种。结构中的各元素应代表同一事务的不同侧面,而不应把描述没有关系或关系很弱的不同事务的元素放到同一结构中。示例:如下结构不太清晰、合理。typedef struct student_struunsigned char name8; /* students name */ unsigned char age; /* students age */ unsigned char sex; /* students sex, as follows */ /* 0 - female; 1 - male */ unsigned char
16、 teacher_name8; /* the student teachers name */ unisgned char teacher_sex; /* his teacher sex */ student;c+语言编码规范 第 10 页若改为如下,可能更合理些。typedef struct teacher_stru unsigned char name8; /* teacher name */ unisgned char sex; /* teacher sex, as follows */ /* 0 - female; 1 - male */ teacher;typedef struct
17、student_struunsigned char name8; /* students name */unsigned char age; /* students age */unsigned char sex; /* students sex, as follows */ /* 0 - female; 1 - male */unsigned int teacher_ind; /* his teacher index */ student;3.4. 结构中的元素个数结构中的元素个数结构中元素的个数应适中。若结构中元素个数过多可考虑依据某种原则把元素组成不同的子结构,以减少原结构中元素的个数。
18、增加结构的可理解性、可操作性和可维护性。示例: typedef struct person_base_info_struunsigned char name8;unsigned char age;unsigned char sex; person_base_info;c+语言编码规范 第 11 页typedef struct person_address_struunsigned char addr40;unsigned char city15;unsigned char tel; person_address;typedef struct person_struperson_base_inf
19、o person_base;person_address person_addr; person;c+语言编码规范 第 12 页4. 函数过程函数过程4.1. 避免直接使用函数参数避免直接使用函数参数将函数的参数作为工作变量,有可能错误地改变参数内容,所以很危险。对必须改变的参数,最好先用局部变量代之,最后再将该局部变量的内容赋给该参数。下函数的实现不太好:void sum_data( unsigned int num, int *data, int *sum )unsigned int count;*sum = 0;for (count = 0; count num; count+)*sum
20、 += datacount; / sum 成了工作变量,不太好。若改为如下,则更好些:void sum_data( unsigned int num, int *data, int *sum )unsigned int count ;int sum_temp;sum_temp = 0;for (count = 0; count b ) ? a : b ;改为如下就很清晰了:int max (int a, int b) return (a b) ? a : b);value = max (a, b);或改为如下。#define max (a, b) (a) (b) ? (a) : (b)valu
21、e = max (a, b);4.3. 避免多参数函数避免多参数函数本建议目的是防止函数间的控制耦合。调度函数是指根据输入的消息类型或控制命令,来启动相应的功能实体(即函数或过程) ,而本身并不完成具体功能。控制参数是指改变函数功能行为的参数,即函数要根据此参数来决定具体怎样工作。非调度函数的控制参数增加了函数间的控制耦合,很可能使函数间的耦合度增大,并使函数的功能不唯一。非调度函数应减少或防止控制参数,c+语言编码规范 第 14 页尽量只使用数据参数。如下函数构造不太合理:int add_sub( int a, int b, unsigned char add_sub_flg )if (ad
22、d_sub_flg = integer_add)return (a + b); else return (a - b);不如分为如下两个函数清晰:int add( int a, int b )return (a + b);int sub( int a, int b ) return (a - b);4.4. 参数检查参数检查检查函数所有非参数输入的有效性,如数据文件、公共变量等。函数的输入主要有两种:一种是参数输入;另一种是全局变量、数据文件的输入,即非参数输入。函数在使用输入之前,应进行必要的检查。c+语言编码规范 第 15 页在同一项目组应明确规定对接口函数参数的合法性检查应由函数的调用者
23、负责还是由接口函数本身负责,缺省是由函数调用者负责。但函数的提供者也要对输出做基本的合法性检查。4.5. 重复代码重复代码如果多段代码重复做同一件事情,那么在函数的划分上可能存在问题。若此段代码各语句之间有实质性关联并且是完成同一件功能的,那么可考虑把此段代码构造成一个新的函数。c+语言编码规范 第 16 页5. 注释规范注释规范5.1. 文件注释文件注释文件头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。示例:下面这段文件注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。/* cop
24、yright (c), 19xx-20 xx infocore. co. ltd. file name: / 文件名 author: version: date: / 作者、版本及完成日期 description: / 用于详细说明此程序文件完成的主要功能,与其他模块 / 或函数的接口,输出值、取值范围、含义及参数间的控 / 制、顺序、独立或依赖等关系 function list: / 主要函数列表,每条记录应包括函数名及功能简要说明1. . history: / 修改历史记录列表,每条修改记录应包括修改日期、修改 / 者及修改内容简述 1. date: author:c+语言编码规范 第 1
25、7 页 modification: 2. .*/5.2. 函数注释函数注释函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。下面这段函数的注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。/* function: / 函数名称 description: / 函数功能、性能等的描述 calls: / 被本函数调用的函数清单 called by: / 调用本函数的函数清单 table accessed: / 被访问的表(此项仅对于牵扯到数据库操作的程序) table updated: / 被修改的表(此项仅对于牵扯到数据库操作的程序) p
26、arameter: / 输入输出参数说明,包括每个参数的作 / 用、取值说明及参数间关系。 return: / 函数返回值的说明 others: / 其它说明*/5.3. 代码注释代码注释边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。修改他人的代码时应该将其本来代码注释掉后重新编写(并标明修改人,修改日期,问题描述) ,而不能简单的删除后用自己c+语言编码规范 第 18 页的代码代替。在代码的功能、意图层次上进行注释,提供有用、额外的信息。注释格式尽量统一,建议使用“/* */” 。注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,
27、帮助读者理解代码,防止没必要的重复注释信息。示例:如下注释意义不大。/* if receive_flag is true */if (receive_flag)而如下的注释则给出了额外有用的信息。 /* if mtp receive a message from links */if (receive_flag)5.4. 注释位置注释位置注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。如下例子不符合规范:例 1:/code/* get replicate sub system index and net indicator */repssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;例 2:repssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;/* get replicate sub system index and net indicator */c+语言编码规范 第 19 页应如下书写/code/* get replic
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45079-2024人工智能深度学习框架多硬件平台适配技术规范
- 2024年转基因食品项目投资申请报告代可行性研究报告
- 《改好食用真菌》课件
- 非盈利组织会计制度
- 《教育心理学宝典》课件
- 学校安全工作应急预案
- 有意义的植树节活动策划方案(34篇)
- 感恩父母演讲稿范文1300字(33篇)
- 陕西省宝鸡市陈仓区2023-2024学年八年级上学期期末考试数学试卷(含答案)
- 福建省莆田市城厢区2023-2024学年七年级上学期期末考试数学试卷(含答案)
- 部编2024版历史七年级上册第二单元《第8课夏商周时期的科技与文化》说课稿
- 水资源基础调查项目招标文件
- 2024国开电大《古代汉语专题》形考任务1-4答案
- 第17课 辛亥革命与中华民国的建立(课件)-【中职专用】《中国历史》魅力课堂教学三件套(高教版2023•基础模块)
- 《国家中长期教育改革和发展规划纲要》-20211107172134
- 2025届陕西西安地区高一上数学期末综合测试模拟试题含解析
- 绿化工程售后服务方案
- 分布式光伏工程报价参考
- 幼儿园大班安全活动《交通安全伴我行》课件
- 三年级下册混合计算题100道及答案
- 北京西城实小2024-2025学年六年级数学第一学期期末综合测试试题含解析
评论
0/150
提交评论