个人读《编写高质量代码改善C 程序的150个建议》摘录的重点.doc

个人读《编写高质量代码改善C 程序的150个建议》摘录的重点.doc

ID:57792139

大小:89.00 KB

页数:6页

时间:2020-03-29

个人读《编写高质量代码改善C 程序的150个建议》摘录的重点.doc_第1页
个人读《编写高质量代码改善C 程序的150个建议》摘录的重点.doc_第2页
个人读《编写高质量代码改善C 程序的150个建议》摘录的重点.doc_第3页
个人读《编写高质量代码改善C 程序的150个建议》摘录的重点.doc_第4页
个人读《编写高质量代码改善C 程序的150个建议》摘录的重点.doc_第5页
资源描述:

《个人读《编写高质量代码改善C 程序的150个建议》摘录的重点.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、个人读《编写高质量代码:改善C++稈序的150个建议》摘录的重点本人主要从事底层驷动的编写,因此主要阅读了《编写高质量代码:改善C++稈序的150个建议》其中的C语言的部分,对于自己认为重要的点记录于此(呵呵,其实每点部重要)1.不要让main函数写成voidmain要想保证稈序具有良好的可移植性能,就要标明main函数返冋int,而不是void。强烈建议使用以下形式:intmain(){//someprocessingcodesreturn0;2.的区别下血的代码就是一个典型的例了:if(nValue=0){//dosomethingif

2、nValueisnotzero・)显然,程序员的本意是要写if(nValue==0)o不幸的是,上述语句虽未达成稈序员的木意,但它却完全是合法的,编译器不会给出任何错谋提示。C++语句首先会将"Value赋值为0,然后再判断nValue是否为非零。结果就是if条件始终不能被满足,大括号中的代码永远不会被执行。针对二和二二Z间的问题,通过良好的代码习惯可以避免,代码如下所示:if(()==nValue){//dosomethingifnValueisnotzero・}其他儿对容易弄错的运算符是&(按位与)和&&(与),以及丨(按位或)和11(

3、或)。对于这两对运算符,能够避免错误的只有细心。3・对表达式计算顺序不要想当然不要过分自信地认为自己已经熟悉了所有运算符的优先级、结合律,多写几个括号确实是个好主意。例如:COLORrgb=(red«16)I(green«8)Iblue;boolisGradeOne=((nGrade&MASK)==GRADE_ONE);iTheCProgrammingLauguage》(程序员亲切地称此书为“K&R”)屮反复强调,函数参数也好,某个操作符屮的操作数也罢,表达式求值次序是不一定的,毎个特定机器、操作系统、编译器也都不一样。例如:a=p()+q

4、()*r();三个函数p()、q()和r()可能以6种顺序屮的任何一种被评估求值。乘法运算符的高优级只能保证q()和r()的返冋值首先相乘,然肩再加到p()的返冋值上。所以,就算加上再的括号依I口不能解决问题。幸运的是,使用显式的、手工指定的屮间变量可以解决这一问题,从而保证固定的子表式评估求值顺序:intparal=p();intpara2=q();a=paral+para2*r();这样,上述代码就为p()、q()和r()三个函数指定了唯一的计算顺序:p()-q()-r()o4.小心宏#define使用中的陷阱(1)用宏定义表达式时,要

5、使用完备的括号。错误的定义:#defineADD(a,b)a+b#defineMULTIPLE(a,b)(a*b)正确的定义应为:#defineADD(a,b)((a)+(b))#defineMUETIPLE(a,b)((a)*(b))(2)使用宏时,不允许参数发生变化。#defineSQUARE(a)((a)*(a))intSquare(inta){returna*a;}intnValueI=10,nValue2=10;intnSquare1=SQUARE(nValue1++);//nSquare1=110,nValue1=12intnS

6、quare2=Square(nValue2++);//nSquare2=l(X),nValue2=l1类似的定义,却产生了不同的结果,究其原因还是宏的字符替换问题。正如上面的示样,两处的a都被参数nValue1++替换了,所以nValue1自增操作也就被执行了两冋。这就是宏在展开时对其参数的多次取值替换所带来的副作用。为了避免出现这样的副作用。最简单有效的方法就是保证宏参数不发生变化,如下所示。#defineSQUARE(a)((a)*(a))intnValue1=10;intnSquare1=SQUARE(nValue1);//nSqua

7、re1=100nValue1++;//nValue1=11(3)用大括号将宏所定义的多条表达式括起来。如果去定义包含多条表达式,一定要用大括号将其括起来。如果没有这个大括号,宋定义的多条表达式很有可能只有第一句会被执行,正如下面的代码片段:#defineCLEAR_CUBE_VALUE(1,w,h)l=0;w=0;h=0;正确的做法应该是用大括号将多条表达式括起来,这样就能保证多条表达式全部执行了,如下瓯的代码片段所示:#defineCLEAR_CUBE_VALUE(1,w,h){1=0;w=0;h=0;}5.不要忘记指针变

8、量的初始化指针是C/C++语言编程屮最给力的T具。指针,让我们育接去面对最为神秘的内存空间,赋予我们对内存进行宜接操作的能力。为对于全局变量来说,在声明的同时,编译器会悄悄完成对

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。