通用编码规范
- 格式:docx
- 大小:22.79 KB
- 文档页数:6
软件开发中的编码规范与标准编码规范是指在软件开发过程中,制定一个规范的标准,使得各种不同的程序员在编写代码时,能够遵循同一套规则,从而使得代码的可维护性、可读性、可扩展性更高,更容易维护和防止出现错误。
在软件开发中,编码规范的重要性不言而喻。
一个良好的编码规范可以避免因代码编写不规范而导致的各种问题,比如说代码难以阅读、调试时的错误或性能问题等等。
如果没有编码规范,每个开发者可能会采用自己的风格编程,最终的代码差异会很大,甚至相互冲突。
那么,软件开发中的编码规范和标准应该如何制定呢?以下是一些建议。
第一,编写代码时必须将变量名、函数名、注释等命名规则规范化,必须具有描述性,并且应尽可能短小精悍。
例如,在变量名中使用下划线或驼峰命名法,这符合通用编程规则,并且易于理解和维护。
第二,确保代码排版正确。
在大部分编程语言中,换行和缩进通常用于代码排版。
使用一种固定的排版风格可以使代码更具可读性,减少出错的可能性,并增强代码的可维护性和可扩展性。
第三,要有注释。
注释是代码中记录的重要信息,这些信息可以提高其他开发者的代码阅读能力,加快团队工作进程。
注释要有明确的意思,注释应该描述程序的行为,而不是重复底层操作的代码。
第四,避免编写过于复杂的代码。
过于复杂的代码容易出错并且不易维护,所以应尽量简化代码逻辑。
如果必须编写复杂的代码,应考虑注释、说明、使用设计模式等方式。
第五,定期进行代码评审和验证。
在团队中,评审代码可以促进代码品质的提高,还能够让团队中的每个成员学习到其他人的编程方式。
最后,为新加入开发团队的初学者编写代码规范指南。
为了更好的合作和提升整体开发能力,建议开发团队编写一份通用的代码规范指南,并让所有成员遵循这一标准,使得整个团队可以更高效,更容易理解并维护代码。
编码规范是软件开发中一个至关重要的环节。
良好的编码规范可以减少代码错误,增加代码可读性和可维护性,并让开发团队保持良好的合作关系。
虽然这只是软件开发的一小部分,但它对于软件开发的质量和成功与否起到重要的决定因素。
C++语言编码规范一、尽量严格按照要求书写代码,统一书写格式。
详细格式参照《参考1_程序格式》。
二、所有头文件都应该使用#define保护来防止头文件被多重包含。
通用的方法:#ifndef_IPROPETRY_H#define_IPROPETRY_H……#endifVC中可以使用的方法:#pragma once三、使用前置声明等方法,尽量减少头文件依赖;#pragma onceclass CUser;class CTest{public:CTest(void);~CTest(void);CUser* m_pUser;};四、包含的文件应按照项目源代码目录树结构排列,避免使用.(当前目录)和..(父目录)。
例如:D:\Work\project\src\base\logging.h应该像返样被包含:#include "base/logging.h"五、包含头文件的顺序如下:CPP的头文件C系统文件C++系统文件其他库头文件本项目内头文件六、编写短小的函数,超过200行的函数可以考虑将它拆分;七、不要使用magic number;把常数定义成常量或者宏来使用;例子一:const int iDmdCount = 8;for (int i=0; i<iDmdCount; ++i){}例子二:int iDmdOffset[] ={101,100,100,99,};int iCount = sizeof(iDmdOffset) / sizeof(iDmdOffset[0]);for (int i=0; i<iCount; ++i){}八、合理使用参数有效性判断和断言;extern"C"RDP_MODULE_PORT int scan_GenerateData(DataBuffersScanning* pBuf) {assert(p_GrayScan);return p_GrayScan->GenerateData(pBuf);}九、对于迭代器和其他模板对象使用前缀形式(++i)的自增、自减运算符。
中国物品编码格式-回复中国物品编码格式,是指用于对中国境内商品进行分类和标识的一种编码规范。
这个编码格式采用了国际通用的国际商品编码体系,主要包括商品类别编码、品种编码和规格编码等内容。
本文将从这些方面逐步阐述中国物品编码格式的具体内容和应用。
一、商品类别编码商品类别编码是指对商品所属的一级大类进行编码,共分为21大类。
这些大类包括农、林、牧、渔业,采掘业,制造业,电力、热力、燃气及水生产和供应业,建筑业,批发和零售业,交通运输、仓储和邮政业,住宿和餐饮业,信息传输、软件和信息技术服务业,金融业,房地产业,租赁和商务服务业,科学研究和技术服务业,水利、环境和公共设施管理业,居民服务、修理和其他服务业,教育,卫生和社会工作,文化、体育和娱乐业,公共管理、社会保障和社会组织,国际组织。
每个大类都有一个唯一的编码数字表示,方便对商品进行分类和管理。
二、品种编码在商品类别编码之后,还需要对商品进行品种编码,用以表示具体的商品种类。
品种编码是在商品类别编码的基础上进行的,通过数字和字母的组合表示不同的品种。
品种编码的规则相对较为灵活,不同的行业和领域可能有不同的编号体系。
例如在电子产品行业,智能手机可以用“01”表示,平板电脑可以用“02”表示,等等。
品种编码旨在更加具体地定义商品的种类,以便在统计、管理和销售等环节中更好地对商品进行跟踪和识别。
三、规格编码除了品种编码,中国物品编码格式还包括了对商品规格的编码。
规格编码是指对商品的尺寸、容量、重量等规格参数进行编码。
这些规格编码通常使用数字和单位组合的方式表示。
例如,在化妆品行业,一个口红的规格编码可能是“3.5g”,表示其净含量为3.5克。
规格编码的主要目的是为了更精确地描述商品的特征,方便用户在购买和使用时进行正确的选择。
四、应用与益处中国物品编码格式的应用十分广泛,对于商品的管理、进出口统计、市场监管等方面起到了重要的作用。
首先,通过编码可以对商品进行分类和归档,方便企业和政府对商品进行管理和监控。
通用商品条码标准(一)中华人民共和国国家标准通用商品条码 GB 12904—2003(代替 GB 12904-1998)Bar code for commodity前言本标准中第4.1条、第4.2条、第4.4.1.2条和第9章为强制性的,其余为推荐性的.附录C的第C.1条和C.5条为强制性的.本标准与国际标准ISO/IEC 15420:2000《信息技术自动识别与数据采集技术条码符号规范EAN/UPC》的一致性程度为非等效.本标准根据ISO/IEC 15420:2000重新起草,并参考《EAN·UCC通用规范》(2002年版),并结合我国的实际情况对GB12904-1998《商品条码》国家标准进行了修订.本标准在技术内容上符合国际标准和国际规范的技术要求,同时也保证在我国应用的可行性和实用性.本标准代替GB12904-1998《商品条码》.本标准与GB 12904-1998相比主要变化如下:--原标准为全文强制,本标准改为部分条款强制.--将原标准第3章中"商品条码"、 "前置码"的定义进行了修改,并删去了"前置码"、"商品消费单元"、"标准版商品条码"、"缩短版商品条码"和"原版胶片条宽减少量"的术语及其定义,增加了"商品标识代码"、"商品项目"、"EAN-13商品条码"、"UPC-A商品条码"、和"UPC-E 商品条码"的术语及其定义.--取消原标准第4章"商品条码的代码结构"的内容,改为"商品标识代码",对原内容进行调整,增加了第4.4条"编码原则".--对原标准第 5.1.9条"供人识别字符"增加了ISO/IEC 15420:2000的相关技术要求.--在原标准第6章的内容基础上进行结构调整,并增加了第6.3条"码制标识符".--取消原标准第7章"商品条码的名义尺寸"的内容,改为"符号尺寸与颜色搭配".对原标准第7.1.2条"条码字符的尺寸"进行了补充说明,将原标准表5中的"条码长度"改为"条码符号长度",并对图12与图13的尺寸标注做了相应修改,增加了第7.2条"符号的颜色搭配"和第7.3条"符号的识读与印制"的内容.--取消原标准第8章"商品条码的技术要求"的内容,改为"符号等级".将原标准第8.2条"条码符号一致性"和第8.3条"空白区"的内容移至第9章,原标准第8.5.2.1条"单项允许偏差要求"和第8.6条"条码符号的光学特性"的主要内容移至新增加的附录G"商品条码的印制过程质量控制技术要求".删去了原标准第8章的其他内容.--取消原第9章"商品条码的印刷厚度"的内容,改为"符号质量及判定规则".--增加了第10章"符号的选用原则".--增加附录D"商品条的码制标识符"、附录E"商品条码的识读和印制指南"、附录F"商品条码的参考译码算法"、附录G"商品条码印制过程质量控制技术要求".删去原标准中的附录B、附录C,将原标准附录D"EAN已分配给编码组织的前缀码"改为附录A"EAN已分配的前缀码"并进行了内容更新,将原标准的附录E"UPC条码"改为附录C"UPC商品条码",并对附录C的内容进行了修改.本标准的附录A、附录B、附录C、附录D、附录F为规范性附录,附录E、附录G为资料性附录.本标准由中国物品编码中心提出并归口.根据国务院标准化行政主管部门的授权,本标准由中国物品编码中心负责组织实施,并由其作为我国商品条码的维护机构.本标准为第一次修订。
ICD编码的原则与规范ICD编码是国际疾病分类系统(International Classification of Diseases)的缩写,它是一个为了方便统计和管理世界各国的疾病和健康问题而制定的标准编码系统。
ICD编码的主要目的是对疾病和健康问题进行分类和编码,以便于医务人员、研究人员和政策制定者进行统计分析和决策。
ICD编码的原则:1. 全球通用原则:ICD编码是全球范围内通用的,以确保不同国家间的疾病和健康数据的比较准确性和一致性。
2. 多层次分类原则:ICD编码采用多层次分类结构,将疾病和健康问题从大类到具体的细分逐层分类,便于对不同层次的数据进行分析和对比。
3. 编码的可变性原则:ICD编码具有一定的可变性,以确保其可以根据医学和社会的发展不断更新和调整,以适应新的疾病和健康问题的出现。
4. 双重编码原则:ICD编码通常采用双重编码的方式,既可以使用数字进行编码,也可以使用字母进行编码,以提高编码的准确性和可读性。
ICD编码的规范:1. 编码的精确性:ICD编码要求对每个疾病和健康问题进行准确的编码,以确保统计数据的准确性和可比性。
2. 编码的一致性:ICD编码要求在不同的时间和地点对相同的疾病和健康问题使用相同的编码,以保证历史数据的连续性和一致性。
3. 编码的完整性:ICD编码要求对所有相关的疾病和健康问题进行编码,以确保统计数据的全面性和完整性。
4. 编码的时效性:ICD编码要求在疾病和健康问题发生或被诊断后及时进行编码,以反映最新的数据信息。
总结:ICD编码是全球通用的疾病和健康问题标准编码系统,它具有多层次分类的原则,并遵循全球通用的编码规范。
ICD编码的应用可以帮助医务人员、研究人员和政策制定者对疾病和健康问题进行统计分析和决策,有助于促进全球卫生事业的发展。
对于从事相关工作的人员来说,熟练掌握ICD编码的原则和规范是必不可少的。
1编码规则及分类指导编码规则是为了规范和统一信息的表示和传输而制定的一系列规则。
编码规则的分类指导可以根据不同的编码目的和应用场景进行划分。
本文将介绍一些常见的编码规则及分类指导。
一、字符编码规则字符编码规则是将字符映射为二进制数的一种规则。
常见的字符编码规则有ASCII码、Unicode和UTF-8等。
1. ASCII码:ASCII(American Standard Code for Information Interchange)是最早的字符编码规则,它使用7位二进制数来表示128个字符,包括英文字母、数字、标点符号以及一些控制字符。
ASCII码只能表示英文字符,对于其他语言的文字则不支持。
2. Unicode:Unicode是一种更为通用的字符编码规则,它支持全球各种语言字符的表示。
Unicode使用整数来表示字符,为每个字符分配一个唯一的码点(code point),从而避免了字符在不同系统中的不一致性。
Unicode有多种实现形式,其中UTF-8和UTF-16应用较广泛。
3. UTF-8:UTF-8是一种实现Unicode的编码规则。
UTF-8使用一至四个字节来表示一个字符,根据字符所在的范围分配不同长度的编码。
对于英文字符,UTF-8与ASCII码兼容,即使用相同的编码。
UTF-8在网络传输和存储中广泛应用,因为它可以节省空间。
二、数值编码规则数值编码规则是将数值映射为二进制数的一种规则。
常见的数值编码规则有二进制、十进制和小数定点表示法等。
1.二进制编码:二进制编码是将数值表示为二进制数的一种规则。
二进制编码非常简单,只由0和1两个数字组成,适合计算机内部的数据表示。
在数字传输和储存中,常通过二进制编码来表示各种数值。
2.十进制编码:十进制编码是我们日常生活中最常用的表示数值的方式。
十进制编码使用0-9十个数字来表示数值,以10作为基数。
十进制编码适合人类理解和使用,但在计算机内部需要转为二进制来进行计算。
代码安全编写规范1.安全编码1.1.通用编码原则(一)不要信任外部的用户输入或系统。
应用程序应该彻底验证所有用户输入,然后再根据用户输入执行操作.验证可能包括筛选特殊字符。
针对用户意外地错误使用和某些人通过在系统中注入恶意命令蓄意进行攻击的情况,这种预防性措施对应用程序起到了保护作用.常见的例子包括SQL 注入攻击、脚本注入和缓冲区溢出。
此外,对于任何非受控的外部系统,都不要假定其安全性.(二)不要通过隐藏来保障安全.尝试使用让人迷惑的变量名来隐藏机密信息或将它们存储在不常用的文件位置,这些方法都不能提供安全保障,最好使用平台功能或使用已被证实可行的技术来保护数据.(三)以安全的方式处理失效如果应用程序失效(如发生严重错误等),要恰当的进行处理,一定要保护好机密数据.同时,在向最终用户返回错误消息时,不要公开任何不需要公开的信息。
也就是不要提供任何有助于攻击者发现应用程序漏洞的详细信息。
1.2.防范常见安全编码问题在实现应用软件的编码阶段,也较容易因缺乏严谨思考或不好的编程习惯而引入安全问题,而且这些安全问题产生的危害作用非常大,因其产生的漏洞常常会造成应用程序中其他部分构筑的安全控制措施完全失效。
目前存在的相当数量系统漏洞都是由编码问题造成的.因此要想保证应用软件的安全性,必须在编码阶段继续高度贯彻安全性原则.在编码阶段,避免安全问题的基本原则如下:➢程序只实现指定的功能➢永远不要信任用户输入,对用户输入数据做有效性检查➢必须考虑意外情况并进行处理➢不要试图在发现错误之后继续执行➢尽可能使用安全函数进行编程➢小心、认真、细致地编程目前在各种应用软件中常见的安全漏洞如下所示,应对这些常见问题进行有针对性的防范。
1.2.1缓冲区溢出如果对输入参数(字符串、整数等)处理时长度检查不严格,或对指针和数组越界访问不进行保护,就容易产生缓冲区溢出(Buffer Overflow)问题,这种问题主要出现在主要出现在C/C++ 语言编写的系统中,它造成的漏洞是当今绝大多数安全漏洞的主要根源。
目录开放技术生态-通用编码规范 (1)一. 代码规范 (3)1.模板及格式化 (3)2.代码提交 (3)3.垃圾清理 (3)二. 日志规范 (3)4.日志输出 (3)5.错误日志 (3)三. 注释规范 (4)6.基本原则 (4)四. 安全规范 (4)7.敏感信息的保护 (4)8.WEB 安全 (4)五. 通用规范 (4)9.金额的使用 (5)10. 枚举的使用 (5)12. 配置信息的使用 (5)13. 异常处理 (5)14. 资源的使用 (5)15. 本地事务操作 (5)16. 线程安全处理 (6)一. 代码规范1.模板及格式化开发人员必须保证代码格式化的一致性,否则可能会导致代码冲突,轻微的耗费人力合并代码;严重时可能导致代码丢失,引起bug 或者故障。
2.代码提交∙ 为防止冲突,任何时候,代码(及配置文件)提交前,先从SVN 中更新代码和配置文件,以及早发现不兼容的代码变更和冲突。
∙ 提交代码(及配置文件)时,如果发生冲突时,先看历史说明,再找相关人员确认,坚决不允许强制覆盖。
3.垃圾清理∙ 对于从来没有用到的或者被注释的方法,变量,类,配置文件,动态配置属性等要坚决从系统中清理出去,避免造成过多垃圾。
二. 日志简要规范(详见日志相关规范)4.日志输出∙ 生产代码禁止以System 及Throwable.printStackTrace 的方式输出日志信息,必须用Logger 替代。
∙ 对trace/debug/info 级别的日志输出,必须使用条件输出形式,否则大量的日志会增加来自对象toString 的性能成本。
∙ 对于日志的打印,任何情况下都不允许日志错误导致业务失败。
∙ 对于异常堆栈的输出,必须以log.XXX (“msg”,e)的形式输出,禁止log.XXX (“msg”+e)的错误形式。
5.错误日志∙ 所有错误日志必须输出到error.log 或common-error.log 中。
本规范规定了公司在研发、采购、生产、仓储中所有物料的通用编码规则,便于物料的采购、跟进、验收、查询、领发、盘点、储存等工作,方便物料的电脑化管理,提高工作效率。
物料编码必须遵守物料编码的原则,合理的物料编码,必须具备下列基本条件:是指一个物料编码只能代表一种物料,同一种物料只能找到一个物料编码,而绝无一种物料有数个物料编码,或者一个物料编码有数种物料。
编码的目的在于将物料化繁为简,便于物料的管理,因此物料编码在应用文字符号或者数字上应力求简单明了,这样可节省阅读、填写、录入的时间,并可减少其中的错误机会。
在物料编码时,所有的物料都应有物料编码可归,这样的物料编码才干完整。
若某些物料找不到赋予的物料编码,则物料编码缺乏完整性。
物料编码要考虑到未来新产品发展和产品规格的变更而发生物料扩展或者变动的情形。
本编码系统格式基本由分类码、规格码、制程码三部份组成,力求尽可能反应物料的特征。
分类码包括大分类、小分类代码;规格码包含物料的规格、属性;制程码是便于区分同种物料不同工艺 (如成形、封装等);当供应商需要加以区别时普通采用重新编码。
编码采用 24 个大写英文字母 1、0 混淆)与阿拉伯数字0~9 混合使用,固定长度 13 主要采用暗示编码法(即从编码中可以获取物料的相关信息)。
C② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫制程码(1~9,A~M)码规格码细分类码(1~9,A~H)小分类码(01~99)大分类码(C1~C9)根据公司现有的物料结构,以 C(公司全拼首字母) +1~9 的组合作为物料的大类代码 (物料编码前二位代码) ,第二位编码 9 之后扩展从字母 A 开始挨次添加。
“C1”—塑胶件、金属件类“C2”—PCB、连接线、接插件、磁性材料类“C3”—开关、按键、传感器、继电器“C4”—电阻、电容、电感、保险丝、电位器、晶振类“C5”—三级管、二极管、 MOS 管、 IC 类“C6”—辅料、包装材料、标识类“C7”—灯具、仪表、电工器件(风扇、制热器件、制冷器件、变压器、线圈等)“C8”—半成品(机电、电源适配器、 PCBA、LCD 屏、摄像头、控制器等)“C9”—成品细分类及编码外观件1外观件1细分类及编码控制板 PCB013小分类及编码... ...接插件 磁性材料 ...03 04 ...传感器 继电器 ...03 04 ...电感 保险 电位器03 04 05MOS 管 IC ...03 04 ...标识 ...03 ...电工件 ...03 ...电源适配器 LCD 屏 控制器03 04 05......对应大分类C1C2C3C4C5C6C7C8C9金属件02连接线02按键02电容02二极管02包装材料02仪表02PCBA02C00202塑胶件01PCB01开关01电阻01三级管01辅料01灯具01机电01C00101晶振06摄像头06塑胶件 01金工件 02标准件 3 标准件3 结构件 2 结构件 2接口板4信号板5驱动板2 电源板1小分类及编码小分类及编码 ... ... ......... ...细分类及编码屏蔽线4 插头 (针) 接插件 034 细分类及编码铁氧体磁芯磁性材料 041细分类及编码波段开关4静电电容 式按键盘4湿度 传感器4过电流继 电器4 小分类及编码 细分类及编码碳膜电 金属膜 玻璃釉电阻 01 阻 电阻 电阻1 2 3 4 5 6瓷介 聚丙烯 贴片电容电容 02 电容 电容1 2 3 4 5 6环形电感 贴片电感 1 2 3 4 ...玻璃保 微型保 自恢复保保险 04 险丝管 险丝管 险丝 ...1 2 3 ... 线绕电 非线绕电位器 05 位器 电位器 ...1 2 ...石英 陶瓷晶振 06 晶振 晶振 ...1 2 ...按钮开关 1机械式按键 1光电位置 传感器1 中间继电器 1 延时开关2薄膜式按键2温度传感器2 时间继电器2 限位开关3橡胶式按键3加速度 传感器3热继电器3 开关 01按键 02传感器 03继电器 04接地线 ...6 ...接地柱 电池座 ...6 7 ...电感 03 电感 电感 ...电子线 1插座(孔) 1 电源线 2插座(针) 2 排线3 插头 (孔) 3 小分类及编码 连接线 02信号线 5保险丝座 5 线绕电阻 熔断电阻 压敏电阻涤纶电容 电解电容 钽电容热敏电阻7 小分类及编码 小分类及编码磁珠2固定 可变拨动开关网络电阻85... ... ...... ......... ... ......... ...中功率2检波2N 沟道增强型2乘法器2辅料/包装材料/标识小分类及编码裸线刷类油类辅料01包装02标识03...小分类及编码机电 01细分类及编码机电...细分类及编码照明灯4变压器4小分类及编码010203指示灯3制冷器件3LED 灯2......制热器件2UV 灯1气压表1风扇1加湿器 ...6 .........线圈5细分类及编码溶剂套管5 6扎带装箱清单5 6小分类及编码01020304大功率3稳压3P 沟道耗尽型3集成稳压器3小功率1整流1N 沟道耗尽型1运算放大器1光电4P 沟道增强型4定时器4胶2木箱2条码2焊料1纸箱1铭牌1胶纸3泡沫3信号发生器5说明书4细分类及编码7 8 9逻辑门6捆扎4开关6发光5ASIC8PLD7...........................⑤ ⑥ ⑦ ⑧ ⑨ ⑩⑤ ⑥ ⑦⑤型号+参数码尺寸码形状码细分类及编码............小分类及编码C001 01 C002 02 C001 1 C002 1电源适配器02 PCBA 03 LCD 屏04 摄像头05 控制器061电源适配器 1PCBA1LCD 屏1摄像头1控制器1.................................⑧ ⑨ ⑩ ⑪分别取型号和参数的前两位,共凑齐 4 位,不足 4 位补 0。
通用编码规范1.引言本规范编制是为了指导程序员编码,其目的是:1)改善软件的可读性,使程序员尽快而彻底地理解新的代码;2)防止新接触本语言的人出于节省时间的需要,自创与组织成员不相容的一套风格;3)防止新接触本语言的人一次次的犯同样的错误;4)新加入的程序员可以很快的适应环境;5)在一致的环境下,减少程序员犯错的机会。
2.编排风格约定编排风格应遵循下列规定:1)严格采用阶梯层次组织程序代码:各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格。
功能块、语句块的边界大括号一律独占一行,相匹配的大括号在同一列,对继行则要求再缩进4格;2)对变量的定义,尽量位于函数的开始位置;3)函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别;4)‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格;5)‘,’之后要留空格,如Function(x, y, z)。
如果‘;’不是一行的结束符号,其后要留空格,如for (initialization; condition; update);6)赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后应当加空格;但是,对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空格,如for (i=0; i<10; i++)和if ((a<=b) && (c<=d));7)一元操作符如“!”、“~”、“++”、“--”、“&”(地址运算符)等前后不加空格。
“[]”、“.”、“->”等操作符前后不加空格;8)修饰符*和&紧靠变量名。
9)各个大的功能块之间最好留一空行以及适当的注释;10) if、for、do、while、switch、case、default等语句自占一行,且if、for、do、while 等语句的执行语句部分无论多少都要加括号{ },对“return语句”不要求;11)不允许把多个短语句写在一行中,即一行只写一条语句;12)长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符),拆分出的新行要进行适当的缩进,使排版整齐,语句可读;13)对于switch…case…语句,break语句要放在{ }内。
3.界面设计约定界面设计应遵循下列约定:1)一般选系统常用的字体,汉字字体选宋体,字体大小为10;2)为方便用户的使用,所有的输入控件应该按tab键排序;3)要考虑到用户可能会用到不同的分辨率,在开发时应使用当时流行的分辨率。
4.命名规则4.1. 变量命名变量命名应遵循下列约定:1)变量名采用匈牙利命名法,命名必须具有一定的实际意义;2)形式为s_xAbcFgh:s由变量的作用范围确定;x由变量类型确定;Abc、Fgh表示连续意义字符串,多个单词之间无间隙;例如:m_strTableName;3)尽量避免用中文的拼音;对非通用的变量,在定义时加入注释说明;4)全局变量用g_开头,即:变量名= g_+变量类型+变量(或缩写)静态变量用s_开头,即:变量名= s_+变量类型+变量(或缩写)成员变量用m_开头,即:变量名= m_+变量类型+变量(或缩写)5)枚举类型(enum)的变量用e做类型前缀;6) struct类型的变量用s做类型前缀。
4.2. 常量命名和宏定义常量命名与宏定义应遵循下列约定:1)常量和宏定义必须全部用大写字母,中间可根据意义的连续性用下划线连接,每一个变量定义的右侧必须有一简单的注释;说明其作用;2)用宏定义表达式时,要使用完备的括号。
4.3. 函数命名函数命名应遵循下列约定:1)函数的命名应该尽量用英文表达出函数完成的功能,遵循动宾结构的命名法则:成员函数可以只有动词,此时宾语默认为调用对象;2)引用外部函数必须注明函数来源(模块名及文件名);3)函数参数规范:参数名称的命名参照变量命名规范;为了提高程序的运行效率,减少参数占用的堆栈,传递大结构的参数,一律采用指针或引用方式传递;为了便于其他程序员识别某个指针参数是入口参数还是出口参数,同时便于编译器检查错误,应该在入口参数前加入const标志。
4.4. 结构体的命名结构体的命名应遵循下列约定:1)结构体的命名必须全部用大写字母;2)结构的功能要单一,是针对一种事务的抽象。
不要设计面面俱到、非常灵活的数据结构;3)仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减少引起误用现象。
5.注释规范注释要求使用中文,注释量应当不少于10%。
5.1. 函数的头注释1)头文件中应有函数的简单注释,实现文件中应有函数的详细注释。
对于如下两种特殊情况可以省略函数的详细注释:(a)属性的读写函数;(b)有效代码量小于8行且没有参数和返回值的函数;2)函数的详细注释应包含如下内容:功能描述、输入参数、输出参数、返回值、创建人、创建日期、修改历史、注意事项;3)对于某些函数,其部分参数为传入值,而部分参数为传出值,所以对参数要详细说明该参数是输入参数,还是输出参数,对于某些意义不明确的参数还要做详细说明(例如:以角度作为参数时,要说明该角度参数是以弧度(PI)还是以度为单位),对既是输入又是输出的变量应该在输入和输出参数处同时标明;4)函数的详细注释模板如表2所示:5.2. 文件的头注释头文件注释内容包括:内容描述、创建人、创建日期、修改历史、版本、遗留问题等,复杂的算法需要加上流程说明,模板如表3所示:5.3. 变量和其它注释变量和其他注释应遵循下列约定:1)原则上对于每个变量应该注释,但对于意义非常明显的变量,如:i、j等循环变量可以不注释;类的成员变量、常量、静态变量必须注释;2)全局变量要有较详细的注释,包括对其功能、取值范围、注意事项等的说明;3)在循环、流程的各分支等,尽可能多加以注释;4)将注释与其上面的代码用空行隔开;5)边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性,不再有用的注释要删除。
6.健壮性为了增强程序的健壮性,特作出如下约定:1)尽量少用goto语句;2)对复杂的条件判断,为了程序的可读性,应该尽量使用括号;3)尽量不采用递归模式;4)所有变量在调用前尽量被初始化;5)不要比较浮点数的直接相等;6)对所有的输入参数,必须进行合法性检查(指针是否为空、数值是否越界、数组元素个数是否为0等非算法级的检查);7)必须有错误处理。
7.模块化和结构化为了提高软件的可重用性,减少重复开发的工作量;同时也为了提高程序的可读性,方便程序的维护,必须加强软件的模块化工作。
模块化应该遵循以下几个基本规范:1)每个函数应该作到精而小,函数的代码应该控制在一个适度的规模,每个函数的代码一般不能超过150行,如果超过这个规模,应该考虑进行模块化的工作。
对于一些特殊的函数确实要超过150行,应该提交出来讨论,通过后,要求编写者更加详细的对函数注释,并写明函数超行的原因,以及设计思想等;2)某一功能,如果重复实现三遍以上,既应该考虑模块化,将其写成通用函数;3)如果不是确实必要,应该尽量少用全局变量;4)程序编码力求简洁,结构清晰,避免太多的分支结构及太过于技巧性的程序;5)对于比较大的函数,每个语句块和特殊的函数调用,都必须注明其功能。
8.内存管理为主提高软件产品的性能,对程序的内容管理做如下约定:1)内存分配后通过检查指针是否为NULL来判断是否分配成功,在使用内存之前也要检查指针是否为NULL;2)使用free或delete释放了内存后,将指针设置为NULL,以免产生“野指针”;3) new/delete 、malloc/free必须配对使用;4)如果函数的参数是一个指针,函数体内不要用该指针申请动态内存;如果非要用指针参数申请内存,应该改用“指向指针的指针”;5)引用被创建的同时必须被初始化,一旦引用被初始化,就不能改变引用的关系。
9.提示信息的定义说明提示信息放在资源中。
我们一般为了节省时间(或者是偷懒),一般将提示信息直接写在代码中,如以下代码:if(m_sText==_T("")){AfxMessageBox("请输入内容");return;}上面的代码看似没有问题,但实际是不规范的。
如果你的系统是多语言版本的,那么你必须每个语言版本改一次代码,这样造成你的代码乃至整个系统维护很复杂。
正确的做法是将提示信息放在资源中,如:if( m_sText == _T("")){CString sMessage;sMessage.LoadString(IDS_ERROR_INPUT); //IDS_ERROR_INPUT放在资源中AfxMessageBox(sMessage);return;} 或可以写成:{AfxMessageBox(IDS_ERROR_INPUT);}这是AfxMessageBox本身支持ID的。
这样实现多语言版本只需修改资源即可(国外的软件几乎都是如此)。
10.其它1)尽量使用标准库函数和公共函数;2)多使用括号以避免二义性;3)操作符“&&”和“||”的右侧表达式尽量不具有副作用(side-effect)。
也就是说,像 if (x == 20 && ++y == 19)这样的表达式尽量少使用;4)循环计数器的值尽量不在循环体内修改;5)禁止超过两级的指针;6)尽量用乘法或其它方法代替除法;7)在多重循环中,应将频度最高的循环放在最内层;8)为保证系统间的兼容性,不使用int类型(因为不同系统之间的存储字节长度往往不同),应使用long或short型;9)行注释统一只用“//”;10)不要大量使用无符号型变量。
无符号变量在判断时易造成错误,甚至死循环,尽量少用;11)少使用malloc、free、realloc;多用new、delete。
new、delete是规范的C++语法,通用性强,realloc易造成内存抖动;12)为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块;13)用 #include <filename.h> 格式来引用标准库的头文件;14)用 #include “filename.h”格式来引用非标准库的头文件。