欢迎来到天天文库
浏览记录
ID:57057183
大小:237.50 KB
页数:35页
时间:2020-07-30
《C语言编程技巧-之二课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言编程技巧—之二表达式和基本语句常量和宏变量第4章表达式和基本语句表达式和语句都属于C++/C的短语结构语法。很多程序员用隐含错误的方式写表达式和基本语句。主要讨论:if、for、while、goto、switch4.1运算符的优先级4.2复合表达式4.3if语句4.4循环语句的效率4.5for语句的循环控制变量4.6switch语句4.7goto语句4.1运算符的优先级C++/C语言的运算符有数十个,运算符的优先级与结合律如表4-1所示。一元运算符+-*的优先级高于对应的二元运算符。【建议4-1】如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。
2、为了防止产生歧义并提高可读性,应当用括号确定表达式的操作顺序。word=(high<<8)
3、lowif((a
4、b)&&(a&c))4.2复合表达式复合表达式:a=b=c=0;允许复合表达式存在的理由是:(1)书写简洁;(2)可以提高编译效率。但要防止滥用复合表达式。若变量名较长,不要连写赋值语句。pthisJring->n=pthisJring->m=pthisJring->k=0;//语句太长,不清晰pthisJring->n=0;//这样语句排列整齐明确pthisJring->m=0;pthisJring->k=0;【建议4-2】不要编写太复杂的复合表达式。【建议4-3】不要
5、有多用途的复合表达式。i=a>=b&&c=b)&&(c6、或者1、0进行比较。根据布尔类型的语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE的值究竟是什么并没有统一的标准。VisualC++将TRUE定义为1,VisualBasic则将TRUE定义为-1。建议的方法:自己定义布尔变量名字为flag,它与零值比较在文件中自己定义TRUE、FALSE等if(flag==TRUE)//不良风格if(flag==1)//不良风格if(flag==FALSE)//不良风格if(flag==0)//不良风格if(flag)//表示flag为真if(!flag)//表示flag为假#defineTRUE1#defi7、neFALSE0if(flag==TRUE)//定义后可以这样比较4.3.2整型变量与零值比较【建议4-6】应当将整型变量用“==”或“!=”直接与0比较。不可模仿布尔变量的风格.intvalue=1;if(value==0)//这样比较表示value是整型变量if(value!=0)intvalue=1;if(value)//会让人误解value是布尔变量if(!value)4.3.3浮点变量与零值比较【建议4-7】不可将浮点变量用“==”或“!=”与任何数字比较。千万要留意,无论是float还是double类型的变量,都有精度限制,应该设法转化成“>=”或“<=”形式。flo8、atx;…if(x==0.0)//隐含错误的比较#defineEPSINON0.00001//允许的误差floatx;if((x>=-EPSINON)&&(x<=EPSINON))4.3.4指针变量与零值比较【建议4-8】应当将指针变量用“==”或“!=”与NULL比较。指针变量的零值是“空”(记为NULL)。尽管NULL的值与0相同,但是两者意义不同。int*p;if(p==NULL)//p与NULL显式比较,强调p是指针变量if(p!=NULL)//p与NULL显式比较,强调p是指针变量if(p==0)//容易让人误解p是整型变量if(p!=0)if(p)//容易让人误解p是9、布尔变量if(!p)4.3.5对if语句的补充说明有时候我们可能会看到if(NULL==p)这样古怪的格式。不是程序写错了,是程序员为了防止将if(p==NULL)误写成if(p=NULL),而有意把p和NULL颠倒。if(NULL==p)//if(p=NULL)//是合法的,但是含义与程序员设想不同if(NULL=p)//是错误的程序中有时会遇到if/else/return的组合,应该将如下不良风格的程序if(condition)returnx;returny;if(condi
6、或者1、0进行比较。根据布尔类型的语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE的值究竟是什么并没有统一的标准。VisualC++将TRUE定义为1,VisualBasic则将TRUE定义为-1。建议的方法:自己定义布尔变量名字为flag,它与零值比较在文件中自己定义TRUE、FALSE等if(flag==TRUE)//不良风格if(flag==1)//不良风格if(flag==FALSE)//不良风格if(flag==0)//不良风格if(flag)//表示flag为真if(!flag)//表示flag为假#defineTRUE1#defi
7、neFALSE0if(flag==TRUE)//定义后可以这样比较4.3.2整型变量与零值比较【建议4-6】应当将整型变量用“==”或“!=”直接与0比较。不可模仿布尔变量的风格.intvalue=1;if(value==0)//这样比较表示value是整型变量if(value!=0)intvalue=1;if(value)//会让人误解value是布尔变量if(!value)4.3.3浮点变量与零值比较【建议4-7】不可将浮点变量用“==”或“!=”与任何数字比较。千万要留意,无论是float还是double类型的变量,都有精度限制,应该设法转化成“>=”或“<=”形式。flo
8、atx;…if(x==0.0)//隐含错误的比较#defineEPSINON0.00001//允许的误差floatx;if((x>=-EPSINON)&&(x<=EPSINON))4.3.4指针变量与零值比较【建议4-8】应当将指针变量用“==”或“!=”与NULL比较。指针变量的零值是“空”(记为NULL)。尽管NULL的值与0相同,但是两者意义不同。int*p;if(p==NULL)//p与NULL显式比较,强调p是指针变量if(p!=NULL)//p与NULL显式比较,强调p是指针变量if(p==0)//容易让人误解p是整型变量if(p!=0)if(p)//容易让人误解p是
9、布尔变量if(!p)4.3.5对if语句的补充说明有时候我们可能会看到if(NULL==p)这样古怪的格式。不是程序写错了,是程序员为了防止将if(p==NULL)误写成if(p=NULL),而有意把p和NULL颠倒。if(NULL==p)//if(p=NULL)//是合法的,但是含义与程序员设想不同if(NULL=p)//是错误的程序中有时会遇到if/else/return的组合,应该将如下不良风格的程序if(condition)returnx;returny;if(condi
此文档下载收益归作者所有