C语言代码风格ppt课件.ppt

上传人:牧羊曲112 文档编号:1375708 上传时间:2022-11-16 格式:PPT 页数:48 大小:1.75MB
返回 下载 相关 举报
C语言代码风格ppt课件.ppt_第1页
第1页 / 共48页
C语言代码风格ppt课件.ppt_第2页
第2页 / 共48页
C语言代码风格ppt课件.ppt_第3页
第3页 / 共48页
C语言代码风格ppt课件.ppt_第4页
第4页 / 共48页
C语言代码风格ppt课件.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《C语言代码风格ppt课件.ppt》由会员分享,可在线阅读,更多相关《C语言代码风格ppt课件.ppt(48页珍藏版)》请在三一办公上搜索。

1、代码规范rules and guidelines of Coding Style优秀程序员的必备素质,关于代码风格问题,代码风格(Coding Style)是一种习惯现在许多大公司都对员工书写代码制定了规范开发大项目时由项目管理者制定代码规范Basic rules and guidelines of Coding Style程序版式程序注释命名规则Some other rules and guidelines of Coding Style内存管理,代码总体原则,清晰第一编写程序以人为本,计算机第二简洁为美代码越长,越难看懂,越容易出错,越难改错,可靠性越低重复代码尽可能提炼成函数选择合适的风

2、格,与代码原有风格保持一致重构/修改其他的代码时比较明智的做法,程序版式,程序版式程序员的书法比书法好学得多,基本不需要特别练习但是坏习惯一旦养成,就像书法一样难以改变不影响程序的功能,但影响程序的可读性追求清晰、整洁、美观、一目了然容易阅读,容易测试,程序版式,不良的风格,int isprime(int n)int k,i;if (n = 1) return 0;k=sqrt(double)n); for (i=2;i=k;i+)if(n%i=0) return 0;return 1;,#include #include main()int i;for (i=2;i100;i+)if(isp

3、rime(i)printf(%dt,i); ,程序版式,良好的风格,int isprime(int n) int k, i; if (n = 1) return 0; k = (int)sqrt(double)n); for (i=2; i=k; i+) if (n % i = 0) return 0; return 1;,#include #include main() int i; for (i=2; i100; i+) if (isprime(i) printf(%dt, i); ,程序版式,对齐(Alignment)与缩进(indent) 保证代码整洁、层次清晰的主要手段“”位置的两种

4、风格和独占一行,且位于同一列,与引用它们的语句左对齐,便于检查配对情况位于同一层和之内的代码在右边数格处左对齐,即同层次的代码在同层次的缩进层上可以用设置为4个空格的Tab键缩进,尽量不用空格缩进,建议的风格,不建议的风格,程序版式,变量的对齐规则数据类型 + N个TAB + 变量名 + N个TAB +=+初始化值 ;例char name20;char addr30;char sex = F;int age = 20;float score = 90;,程序版式,空行分隔程序段落的作用在每个类声明之后加空行在每个函数定义结束之后加空行在一个函数体内,相邻两组逻辑上密切相关的语句块之间加空行,语

5、句块内不加空行,程序版式,代码行内的空格增强单行清晰度关键字之后加空格函数名之后不加空格赋值、算术、关系、逻辑等二元运算符前后各加一空格,但一元运算符前后一般不加空格sum = sum + term;(向后紧跟,) , ;向前紧跟,紧跟处不留空格, ;后留一个空格Function(x, y, z)for (initialization; condition; update) . - 前后不加空格对表达式较长的for和if语句,为了紧凑可在适当地方去掉一些空格for (i=0; ic) & (b+ca) & (c+ab),程序版式,程序版式,代码行一行只写一条语句,这样方便测试一行只写一个变量,

6、这样方便写注释int width; /宽度int height; /高度int depth; /深度尽可能在定义变量的同时,初始化该变量int sum = 0;if、for、while、do等语句各占一行,执行语句无论有几条都用和将其包含在内,这样便于维护if (width height) DoSomething();/空行OtherThing();,程序版式,程序版式,长行拆分代码行不宜过长,应控制在10个单词或70-80个字符以内Studies show that up to ten-word text widths are optimal for eye tracking实在太长时要在适

7、当位置拆分,拆分出的新行要进行适当缩进if (veryLongVar1 = veryLongVar2) ,程序版式,修饰符*和,标识符命名规则,按照执行级别分为:共性规则必须执行简化规则建议采用可选规则灵活运用,标识符命名的共性规则,直观可以拼读,见名知意,不必解码最好采用英文单词或其组合,切忌用汉语拼音尽量避免出现数字编号不要出现仅靠大小写区分的相似的标识符不要出现名字完全相同的局部变量和全局变量,标识符命名的共性规则,用正确的反义词组命名具有互斥意义的变量或相反动作的函数int minValue;int maxValue;int GetValue();int SetValue();,标识符

8、命名的共性规则,尽量与所采用的操作系统或开发工具的风格保持一致驼峰命名法帕斯卡命名法匈牙利命名法在Linux/Unix平台习惯用“小写加下划线”function_name variable_NameWindows风格大小写混排的单词组合而成 FunctionName variableName,Windows应用程序命名规则,Microsoft公司的Hungarian Notation(匈牙利命名法)主要思想在变量和函数名前加上前缀,用于标识变量的数据类型限定范围的前缀 + 数据类型前缀 + 有意义的英文单词限定范围的前缀静态变量前加前缀s_ ,表示static全局变量前加前缀g_ ,表示glo

9、bal类内的成员函数m_默认情况为局部变量数据类型前缀ch 字符变量前缀i 整型变量前缀f 实型变量前缀p 指针变量前缀,Windows应用程序命名规则,缺点烦琐例如int i, j, k; float x, y, z;若采用匈牙利命名规则,则应写成int iI, iJ, ik; /前缀i表示int类型float fX, fY, fZ; /前缀f表示float类型,简化的Windows应用程序命名规则,变量名形式小写字母开头“名词”或者“形容词+名词”如oldValue, newValue等函数名形式大写字母开头“动词”或者“动词+名词”(动宾词组)如GetValue(), SetValue(

10、)等 宏和const常量全用大写字母,并用下划线分割单词#define ARRAY_LEN 10const int MAX_LEN = 100;,灵活运用的命名规则,限定范围的前缀与数据类型前缀可要可不要无特殊意义的循环变量可以直接定义成i,j,k等单字母变量,注释规范,注释(Comments)的重要性写注释给谁看?在哪些地方写注释?怎样写注释?注释的风格写注释时的注意事项可灵活运用的一些规则,注释规范,注释的重要性注释对于程序犹如眼睛对于人的重要性一样没有注释的程序对于读者好比眼前一团漆黑,跟拿到一个可执行程序别无二致不规范的注释和好几千度的近视眼没什么区别代码本身体现不出价值开发程序的思维

11、才能使其变得有价值这种思维的具体体现就是在于注释和规范的代码本身,注释规范,写注释给谁看?给自己看,使自己的设计思路得以连贯给继任者看,使其能够接替自己的工作,注释规范,写注释的最重要的功效在于传承要站在继任者的角度写简单明了、准确易懂、防止二义性让继任者可以轻松阅读、复用、修改自己的代码让继任者轻松辨别出哪些使自己写的,哪些是别人写的,注释规范,不好的注释i = i + 1; /i加1return -1; /返回-1free(p); /释放p所指的内存fclose(fin); /关闭文件,注释规范,不好的注释不但白写,还扰乱了读者的视线/*以二进制只读方式打开文件并判断打开是否成功*/if

12、(fin = fopen(cat.pic,rb) = NULL) puts(打开文件cat.pic失败);/*如果打开失败,则显示错误信息*/ return -1; /*返回-1*/*从图像的第1行到第400行循环*/for (i=0; i400; i+) /*从图像的第1列到第400列循环*/ for (j=0; j400; j+) /*按照公式Y = 0.299*R+0.587*G+0.114*B计算灰度值*/ y = (299 * r + 587 * g + 114 * b) / 1000; fclose(fin); /*关闭文件*/,注释规范,好的注释(尤其是算法注释)是对设计思想的精

13、确表述和清晰展现,能揭示代码背后隐藏的重要信息/*打开输入文件后判断文件长度是否符合格式要求*/if (fin = fopen(cat.pic,rb) = NULL) puts(打开文件cat.pic失败); return -1; /* * 下面是图像转换的算法实现。彩色图像到灰度图像的转换主要利用RGB颜色空间到 * YUV颜色空间的变换公式来取得灰度值,公式为Y = 0.299*R+0.587*G+0.114*B */for (i=0; i400; i+) for (j=0; j400; j+) y = (299 * r + 587 * g + 114 * b) / 1000; fclos

14、e(fin);,注释规范,在哪些地方写注释?在重要的文件首部文件名 + 功能说明 + 作者 + 版本 + 版权声明 + 日期在用户自定义函数前对函数接口进行说明函数功能 + 入口参数 +出口参数 + 返回值 (包括出错处理)在一些重要的语句块上方对代码的功能、原理进行解释说明,注释规范,在一些重要的语句行右方定义一些非通用的变量函数调用较长的、多重嵌套的语句块结束处在修改的代码行旁边加注释,注释规范,函数的注释风格C风格/*/*功能描述: 本函数用于实现xxx功能,目的是: */ /*入口参数: 参数xx,表示 */ /*出口参数: 参数xx,表示 */ /*返回值: 返回xx值,当返回xx值

15、时,表示 */*/* 功能描述: 本函数用于实现xxx功能,目的是: 入口参数: 参数xx,表示 出口参数: 参数xx,表示 返回值: 返回xx值,当返回xx值时,表示 */C+风格/功能描述: 本函数用于实现xxx功能,目的是: /入口参数: 参数xx,表示 /出口参数: 参数xx,表示 /返回值: 返回xx值,当返回xx值时,表示 /,注释规范,一块语句的注释风格/* *C风格 */C风格 /*/*下面代码是用来接收网络数据,其原理为*/* */*/ Visual C+风格 /,注释规范,一行语句的注释风格/*C风格*/Visual C+风格i = j + 1;/代码行右方的注释/代码行之

16、上的注释i = j + 1;例子ResetSrollInfo(g_hwndThumb);/初始化滚动条位置for循环while循环 if() /if结束/while结束/for结束,注释规范,可灵活运用的一些规则注释可长可短,但应画龙点睛,重点加在语义转折处简单的函数可以用一句话简单说明/两数交换void Swap(int *x, int *y)内部使用的函数可以简单注释,供别人使用的函数必须严格注释,特别是入口参数和出口参数,注释规范,写注释时的注意事项注释不是白话文翻译,不要鹦鹉学舌Dont write comments that repeat the code注释不是教科书,不要把别人当

17、成初学者注释不是标准库函数参考手册注释不是越多越好,不好的注释等于垃圾不写做了什么,写想做什么Do write illuminating comments that explain approach and rationale边写代码边注释修改代码同时修改注释,函数规范,一个函数仅仅完成一件功能不好的例子:内存泄露的情形Char *buffer=(char*)malloc(*_SIZE);Buffer=(char*)realloc(buffer,NEW_SIZE);一个函数代码行数不要超过100行重复代码尽可能提炼成函数降低维护成本代码块嵌套深度不超过4层,函数规范,避免使用全局变量下面例子结

18、果可能是未知的intg_exam; Unsigned intexample(intpara) unsignedint temp;g_exam=para;/(*)temp=square_exam(); returntemp;,函数规范,对参数的合法性检查,应统一规定,缺省由调用者负责函数的参数个数不超过5个,如超过了,建议拆分为不同函数,程序放置顺序,1、#include 2、#include 用户自定义文件3、#define 宏定义4、全局变量定义5、函数原型声明6、main函数定义7、用户自定义函数,int flag=0;if(flag=1)if(!flag)if(flag!=0)While

19、(!flag)While(flag!=0)While(flag=1),深圳华为C语言面试题目,局部变量能否和全局变量重名? 如何引用一个已经定义过的全局变量? 语句for( ;1 ;)有什么问题?它是什么意思? dowhile和while有什么区别?,请写出下列代码的输出内容 #include main() int a,b,c,d; a=10; b=a+; c=+a; d=10*a+; printf(b,c,d:%d,%d,%d,b,c,d); return 0;,static局部变量和普通局部变量有什么区别?请问下面程序有什么错误?inta602501000,i,j,k;for(k=0;k=1000;k+)for(j=0;j250;j+)for(i=0;i60;i+) aijk=0;,#defineSQUARE(a)(a)*(a)inta=5;intb; b=SQUARE(a+);,设int arr=6,7,8,9,10; int *ptr=arr; *(ptr+)+=123; printf(%d,%d,*ptr,*(+ptr);,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号