收藏 分销(赏)

软件研究室培训(编程规范).ppt

上传人:w****g 文档编号:1365050 上传时间:2024-04-24 格式:PPT 页数:27 大小:691KB
下载 相关 举报
软件研究室培训(编程规范).ppt_第1页
第1页 / 共27页
软件研究室培训(编程规范).ppt_第2页
第2页 / 共27页
软件研究室培训(编程规范).ppt_第3页
第3页 / 共27页
软件研究室培训(编程规范).ppt_第4页
第4页 / 共27页
软件研究室培训(编程规范).ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、编程规范编程规范1、程序员花更多的时间在调试、维护和升级已有代码上,而不是编写、程序员花更多的时间在调试、维护和升级已有代码上,而不是编写新的代码;新的代码;2、程序最重要的是正确性,其次是可维护性,最后才是效率;、程序最重要的是正确性,其次是可维护性,最后才是效率;3、学习如何写优美的程序与学习如何正确地编写代码同样重要;、学习如何写优美的程序与学习如何正确地编写代码同样重要;4、让程序尽量简单易懂,即使违背了某些规则也无关紧要、让程序尽量简单易懂,即使违背了某些规则也无关紧要;5、一个运行正常但没有注释的程序如同一个等待爆炸的定时炸弹,因、一个运行正常但没有注释的程序如同一个等待爆炸的定时

2、炸弹,因为早晚会有人修改或升级这个程序;为早晚会有人修改或升级这个程序;6、好风格应该成为一种习惯。如果你在开始写代码时就关心风格问题,、好风格应该成为一种习惯。如果你在开始写代码时就关心风格问题,如果你花时间去审视和改进它,你将会逐渐养成一种好的编程习惯。一如果你花时间去审视和改进它,你将会逐渐养成一种好的编程习惯。一旦这种习惯变成自动的东西,你的潜意识就会帮你照料许多细节问题,旦这种习惯变成自动的东西,你的潜意识就会帮你照料许多细节问题,甚至你在工作压力下写出的代码也会更好。甚至你在工作压力下写出的代码也会更好。关于编程规范的几个原则关于编程规范的几个原则floatb,c10;voidab

3、c(void)floatzongfen=0;intd;for(d=0;d0)zongfen+=cb;b=zongfen/10;这段程序在做什么?这段程序是否有错误?这程序中存在哪些不良的书写风格?它们可能会引起什么后果?程序实例程序实例floatb,c10;voidabc(void)floatzongfen=0;intd;for(d=0;d0)zongfen+=cb;b=zongfen/10;#defineSTUDENT_NUM10/学生总数floatfAvgScore;/平均分floatfScoreSTUDENT_NUM;/分数/*平均分计算函数*/voidAvgScore(void)int

4、i;floattotal_score=0;/总分for(i=0;i0)/遇到负分,记为0分total_score+=fScorei;/计算平均分if(STUDENT_NUM0)fAvgScore=total_score/STUDENT_NUM;有了哪些改进?你认为还有什么地方需要改进?一、标识符一、标识符标识符的命名要清晰、明了,有明确含义。使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。标识符应当采用英文单词或其组合,切忌使用汉语拼音来命名。坏的命名:int a/Age1/XueshengAge;好的命名:int StudentAge;1.1 变量名变量名1.1.1不同作用域变量的

5、命名局部变量以小写字母命名;全局变量以首字母大写方式命名(骆驼式);定义类型和宏定义常数以大写字母命名;变量的作用域越大,它的名字所带有的信息就应该越多。局部变量:int student_age;全局变量:int StudentAge;宏定义常数:#define STUDENT_NUM 10类型定义:typedef INT16S int;1.1.2不同类型变量的命名(匈牙利命名法)匈牙利命名法是一种命名约定。匈牙利命名法把变量的类型(或者它的预期使用)等信息编码在变量名中。一些常用的匈牙利命名法前缀数据类型前缀例子 char c cInChar char c cInChar unsigned

6、char uc ucOutChar unsigned char uc ucOutChar int i iReturnValue int i iReturnValue unsigned int ui uiControlWord unsigned int ui uiControlWord long l lNumRecs long l lNumRecs float f fLength float f fLength double d dArea double d dArea一、标识符一、标识符1.1.3指针变量的命名 对于指针的定义,名称大小写根据指针为全局/局部变量来定,但指针名必须以小写的“p”

7、开头。如:int *pDay;int *pDay;/全局指针 int *pday;int *pday;/局部指针 int*ppDay;int*ppDay;/指针的指针1.1.4在某一模块中使用的变量,变量名的开始需有模块名。如:模块KEY.C中的变量:int iKeyNum;int iKeyNum;int iKeyNumBuff10;int iKeyNumBuff10;一、标识符一、标识符一、标识符一、标识符1.2 函数名函数名函数名的命名应象全局变量一样采用首字母大写方式(骆驼式)。函数名的开始应以“模块名_”的格式注明函数所属模块。例如:(1)KEY.C模块的函数voidKEY_Init(

8、void);voidKEY_StartScan(void);voidKEY_StopScan(void);(2)TMR.C模块的函数voidTMR_Init(void);voidTMR_Start(TMR_IDtmr);voidTMR_Stop(TMR_IDtmr);二、排版二、排版名字的合理选择可以帮助理解程序。同样,也应该以尽可能一目了然的形式书写语句。这就像保持书桌整洁可以使你容易找到东西一样。2.1 用缩进格式书写代码用缩进格式书写代码 函数或过程的开始、结构定义及循环、判断等语句中的代码都要采用缩进;缩进的空格数为4个;使用空格键,不使用TAB键;程序块的分界符(和)应各独占一行。例

9、:for(i=0;i0)/遇到负分,记为0分total_score+=fScorei;二、排版二、排版2.2 其他书写格式其他书写格式2.2.1 长语句 较长的语句(多于80字符)要分成多行书写;长表达式要在低优先级操作符处划分新行,操作符放在新行之首;划分出的新行要进行适当的缩进,使排版整齐,语句可读;不允许把多个短语句写在一行中,即一行只写一条语句。例:修改前:MeasData.TransTdir=TransTdir*SetData.Filter+TransTdir*(1-SetData.Filter);MeasData.TransTdir=TransTdir*SetData.Filter

10、+TransTdir*(1-SetData.Filter);修改后:MeasData.TransTdir=TransTdir*SetData.FilterMeasData.TransTdir=TransTdir*SetData.Filter +TransTdir*(1-SetData.Filter);+TransTdir*(1-SetData.Filter);二、排版二、排版2.2.2 空行和空格的使用 相对独立的程序块之间、变量定义之后语句开始以前必须加空行;逗号、分号只在后面加空格;比较操作符、赋值操作符、算术操作符、逻辑操作符、位域操作符等双目操作符的前后加空格;“!”、“”、“+”、“

11、-”、“&”等单目操作符前后不加空格;-、.前后不加空格。例:void Func1(int x,int y,int z);void Func1(int x,int y,int z);/良好的风格 void Func1(int x,int y,int z);void Func1(int x,int y,int z);/不良的风格 x=a b?a:b;x=a b?a:b;/良好的风格 x=ab?a:b;x=a=b&c d&c+f=b&c d&c+f=”或“=-EPSINON)&(x=-EPSINON)&(x 29)if(col 29)col=29;col=29;#if LCD_MODE=_VGA#

12、if LCD_MODE=_VGA x=150+(INT16U)col*8;x=150+(INT16U)col*8;#elif#elif x=(INT16U)col*8;x=(INT16U)col*8;#endif#endif return(x);return(x);代码中的数(29,8,150)都是什么意义?这些神秘的数给程序的阅读和维护增加了很大的难度。#define LCD_MAX_COL 29 /LCD#define LCD_MAX_COL 29 /LCD最大列数最大列数#define LCD_START_X 150 /LCD#define LCD_START_X 150 /LCD起始起

13、始X X坐标坐标#define LCD_COL_WIDTH 8 /LCD#define LCD_COL_WIDTH 8 /LCD列宽列宽INT16U LCD_GetStX(INT8U col)INT16U LCD_GetStX(INT8U col)INT16U x;INT16U x;if(col LCD_MAX_COL)if(col LCD_MAX_COL)col=LCD_MAX_COL;col=LCD_MAX_COL;#if LCD_MODE=_VGA#if LCD_MODE=_VGA x=LCD_START_X+(INT16U)col*LCD_COL_WIDTH;x=LCD_START_X

14、+(INT16U)col*LCD_COL_WIDTH;#elif#elif x=(INT16U)col*LCD_COL_WIDTH;x=(INT16U)col*LCD_COL_WIDTH;#endif#endif return(x);return(x);四、常量四、常量四、常量四、常量4.1 为什么要用常量为什么要用常量 如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?(1)程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。(2)在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。(3)如果要修改数字或字符串,

15、则会在很多地方改动,既麻烦又容易出错。4.2 定义常量的方法定义常量的方法(1)#define 宏定义(2)const 常量(3)enum 枚举4.3#define#define 宏定义宏定义 使用最广泛,如:#define MAX_TEACHER 100#define MAX_TEACHER 100缺点:宏定义的常量没有类型,只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。4.4 const 4.4 const 常量常量如:const int MAX_STUDENT=100;const int MAX_STUDENT=100;优点:const 常量有数据类型,而宏常

16、量没有数据类型。编译器可以对前者进行类型安全检查。缺点:const 常量无法在数组定义时作为数组长度。如:float StudentHeightMAX_STUDENT;float StudentHeightMAX_STUDENT;/错误四、常量四、常量4.5 枚举枚举 enumRED,BLUE,GREEN,YELLOW,WHITE,BLACK,COLOR_NUM;enumRED,BLUE,GREEN,YELLOW,WHITE,BLACK,COLOR_NUM;优点:(1)适合一次定义批量常数,尤其是在数值连续时尤为方便;(2)枚举常量可以作为数组长度,如:float BallSizeCOLOR_

17、NUM;float BallSizeCOLOR_NUM;缺点:不能定义除整型外的其他类型常量,如float和double。四、常量四、常量一个运行正常但没有注释的程序如同一个等待爆炸的定时炸弹;而在有注释,但注释不正确时,炸弹的当量更大。注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而有害。5.1 注释的基本概念注释的基本概念C语言的注释符为“/*/”。C+语言中,程序块的注释常采用“/*/”,行注释一般采用“/”。注释通常用于:(1)版本、版权声明;(2)函数接口说明;(3)重要的代码行或段落提示。虽然注释有助于理解代码,但注意不可过多地使用注释。五、注释五、注释五、注释五、注释

18、5.2 注释的准确性注释的准确性 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而有害。尽量避免在注释中使用缩写,特别是不常用缩写。注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。5.3 变量、常量的注释变量、常量的注释 对于所有有物理含义的变量、常量,在定义和声明时都必须加以注释,说明其物理含义。变量、常量、宏的注释应放在其上方相邻位置或右方。数据结构定义和声明(包括数组、结构、类、枚举等),必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中

19、的每个成员的注释放在此成员的右方;同一结构中不同成员的注释要对齐。全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。五、注释五、注释如:#define GUI_TXT_DISP_MOD 0 x0C /#define GUI_TXT_DISP_MOD 0 x0C /文本框内文字显示模式文本框内文字显示模式#define GUI_TXT_RIGHT_DISP 0 x00 /#define GUI_TXT_RIGHT_DISP 0 x00 /文本框内文字左对齐显示文本框内文字左对齐显示#define GUI_TXT_LEFT_DISP 0 x04 /#

20、define GUI_TXT_LEFT_DISP 0 x04 /文本框内文字左对齐显示文本框内文字左对齐显示#define GUI_TXT_CENTRE_DISP 0 x08 /#define GUI_TXT_CENTRE_DISP 0 x08 /文本框内文字居中显示文本框内文字居中显示typedef struct typedef struct CTR_ASPECT Aspect;/CTR_ASPECT Aspect;/外观外观 INT8U *pTxt;/INT8U *pTxt;/文字文字 INT8U TxtFont;/INT8U TxtFont;/字体字体 INT8U Sta;/INT8U

21、Sta;/文本框状态模式文本框状态模式 INT8U WorkMod;/INT8U WorkMod;/工作模式工作模式TXT_BOX;TXT_BOX;五、注释五、注释5.4 函数的注释函数的注释/*/*可编辑文本框选项左移可编辑文本框选项左移 *功能描述功能描述 :按向左键时,可编辑文本框的编辑位向左移一位。按向左键时,可编辑文本框的编辑位向左移一位。*输入参数输入参数 :pbox :pbox 指向可编辑文本框的指针指向可编辑文本框的指针 *返回参数返回参数 :无无 *作作 者者 :Liy-tj *:Liy-tj */*/void GUI_EditTxtBox_Left(EDIT_TXT_BOX

22、*pbox)void GUI_EditTxtBox_Left(EDIT_TXT_BOX*pbox)5.5 /*/和和/文件头、函数头注释使用“/*/”,函数内部注释“/”,如:/*/*GET HOW LONG KEY HAS BEEN PRESSED *GET HOW LONG KEY HAS BEEN PRESSED *Description:Function return the time the key has been pressed.*Description:Function return the time the key has been pressed.*Arguments :n

23、one *Arguments :none *Returns :key down time in milliseconds *Returns :key down time in milliseconds *Author :Liy-tj *Author :Liy-tj */*/INT32U KEY_GetKeyDownTime(void)INT32U KEY_GetKeyDownTime(void)INT32U ctr;INT32U ctr;OS_ENTER_CRITICAL();/Start of critical section of code OS_ENTER_CRITICAL();/Start of critical section of code ctr=KeyDownCtr;/Get key down count ctr=KeyDownCtr;/Get key down count OS_EXIT_CRITICAL();/End of critical section of code OS_EXIT_CRITICAL();/End of critical section of code return(ctr*KEY_SCAN_DLY);return(ctr*KEY_SCAN_DLY);五、注释五、注释THE END

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 品牌综合 > 行业标准/行业规范

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服