《编码规范适行》PPT课件.ppt
程序命名规则,重庆山外山科技有限公司 技术中心-软件部,前言,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。命名规则对软件产品而言并不是“成败悠关”的事,我们不要花太多精力试图发明世界上最好的命名规则,而应当制定一种令大多数项目成员满意的命名规则,并在项目中贯彻实施。,前言,优秀的软件工程师:无私、协作,缩写,文件目录,QT Creator头文件源文件界面文件(若有)IAR、MDK、ADSBOOT(cortexm3_macro.s、stm32f10 x_vector.c)LIBRARY(STM32库文件)UCOSII(若有)USER(用户文件)DOCUMENT(用户文档、编码规范、头文件、源文件样例、更改记录),命名规则-头文件,头文件由三部分内容组成:(1)头文件开头处的版权和版本声明(2)预处理块。(3)函数和类结构声明等。,命名规则-头文件(顶部注解),文件:*.h作者:*版本:V1.0日期:03/01/2010摘要:*,命名规则-头文件(顶部注解),#ifndefXXXX_H#defineXXXX_H#include#include“myhead.h”#endif注:XXXX_H中的XXXX用大写方式,如head.h则写成HEAD_H,命名规则-源文件(顶部注解),(1)版权信息。(2)文件名称,摘要。(3)当前版本号,作者/修改者,完成日期。(4)版本历史信息。,命名规则-源文件(顶部注解),Copyright(c)2012,重庆山外山科技有限公司技术中心All rights reserved.文件名称:*.c/*.cpp摘 要:简要描述本文件的内容 当前版本:1.1 作 者:输入作者(或修改者)名字修改内容:简要说明本次修改内容及功能完成日期:2012年2月1日 取代版本:1.0 原作者:输入原作者(或修改者)名字完成日期:2012年1月10日,命名规则-函数注解,函数名:外设函数的名称 函数原形:原形声明 功能描述:简要解释函数是如何执行的 输入参数 x:输入参数描述 输出参数 x:输出参数描述 返回值:函数的返回值以及返回值的含义,程序注释,注释应对齐边写代码边注释,修改代码同时修改相应的注释注释统一用中文,命名规则,变量的名字应当使用“名词”或者“形容词名词”。1、全局变量 g_2、成员变量 m_3、静态变量 s_ 其它变量命名采用骆驼命名法(camelNameMethod),函数及类采用帕斯卡命名法(CamelNameMethod)Qt中自定义槽函数(SLOTCloseTheWindow),自定义信号函数(SIGNALCloseTheWindow)。,命名规则,常量(包括define定义及枚举)全用大写的字母,用下划线分割单词。例如:const int MAX=100;const int MAX_LENGTH=100;#define MIN_LENGTH10,程序书写规则,在每个类声明之后、每个函数定义结束之后都要加空行。/空行/注解void Function1()/空行/注解void Function2(),程序书写规则,在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。缩进按Tab键(具体缩进方式参照样例工程)/空行while(condition)statement1;/空行 if(condition)statement2;else statement3;/空行 statement4;,程序书写规则,一行代码只做一件事情。一个变量,一条语句int width;/宽度int height;/高度int depth;/深度x=a+b;y=c+d;z=e+f;,程序书写规则,程序的分界符和应独占一行并且位于同一列void Function(int x)/program code,程序书写规则,类的版式,函数以TAB方式缩进class A public:void Func1(void);void Func2(void);private:int m_i,m_j;float m_x,m_y;,突出功能以行为为中心,程序书写规则,参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。如果函数没有参数,则用void填充,(包括函数的定义及声明都必须写上完整的参数)。void SetValue(int width,int height);float GetValue(void);红色部分不能省略。,程序书写规则,如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改,增加程序健壮性。void StringCopy(char*strDestination,const char*strSource);,程序书写规则,不要省略返回值的类型void getchar(void);因为C语言默认返回为int类型,程序书写规则,注意返回值(堆和栈的区别)char*Func(void)char str=“hello world”;return str;,程序书写规则,将有限的值的变量定义成枚举typedef enum/工作模式RUN_MODE_PREPARE,/待机RUN_MODE_HP,/灌流RUN_MODE_HD,/透析RUN_MODE_HF,/滤过RUN_MODE_SF,/单纯超滤RUN_MODE;,内存使用,char*p=(char*)malloc(100);strcpy(p,“hello”);free(p);/p 所指的内存被释放,但是p所指的地址仍然不变/p=NULL;如果没有这句,p就相当于没有初始化if(p!=NULL)/没有起到防错作用strcpy(p,“world”);/出错,内存使用,(1)指针消亡了,并不表示它所指的内存会被自动释放。(2)内存被释放了,并不表示指针会消亡或者成了NULL指针。,内联函数,内联函数外部声明时,inline加在函数定义处inline void A:Foo(int x,int y),程序健壮性,任何不会修改数据成员的函数都应该声明为const类型。int Stack:GetCount(void)const+m_num;/编译错误,企图修改数据成员m_numPop();/编译错误,企图调用非const函数return m_num;,程序健壮性,如果输入参数采用“指针传递”,那么加const修饰可以防止意外地改动该指针,起到保护作用。例如StringCopy函数:void StringCopy(char*strDestination,const char*strSource);,程序健壮性,类的继承若在逻辑上B是A的“一种”,并且A的所有功能和属性对B而言都有意义,则允许B继承A的功能和属性。若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,