附录 c - 练习答案

附录 c - 练习答案

ID:1670587

大小:91.50 KB

页数:22页

时间:2017-11-13

附录 c - 练习答案_第1页
附录 c - 练习答案_第2页
附录 c - 练习答案_第3页
附录 c - 练习答案_第4页
附录 c - 练习答案_第5页
资源描述:

《附录 c - 练习答案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、附录C练习答案本附录给出本书中所有练习的答案。第1章1)编译程序会查获优先顺序错。因为它把表达式解释为:while(ch=(getchar()!=EOF))换句话说,编译程序把它看作是将表达式的值赋给ch,因而认为你把“==”错误的键为“=”,并向你发出可能有复制错误的警告。2a)查获偶然“八进制错误”的最简单方法是扔掉可选择的编译开关,这个开关导致编译程序在偶然遇到八进制常量时出错。取而代之的是使用十进制或十六进制。2b)为了查获程序员将“&&”误键入为“&”(或“

2、

3、”误键为“

4、”)的情况,编译程序采用了与查获将“==”误键为“=”的同

5、样测试。当程序员在if语句中或复合条件中使用了“&”(或“

6、”),并且没有明确地将结果与0进行比较时,编译程序将产生一个错误。所以见到下面这条语句会产生一个警告。if(u&1)/*u是奇数吗?*/而下面这条语句则不会产生警告信息。if((u&1)!=0)/*u是奇数吗?*/2c)警告一个无意而误成为注释的最简单的方法是,当编译发现注释的第一个字符是字母或(时,发出一个警告。这样的测试将查获下面两个可疑情况:quot=numer/*pdenom;quot=number/*(pointerexpression);为了避免发出警告,你可以通过将“

7、/”与“*”之间用空格或括号分开,使你的意图更明确。quot=numer/*pdenom;quot=number/(*pdenom);/*注意:本注释将产生一个警告*//*本注释不产生警告*//*-----------------警告勿忧-----------------*/2d)编译查出可能存在的优先级顺序错的方法是,寻找在同一个不含括号的表达式中的“有麻烦的运算符对”。例如,当程序员偶然将“<<”和“+”运算符一起使用时,编译程序会发现优先级顺序错,对下面的代码发出警告:word=bHigh<<8+bLow;但是,由于下面的语句含有括号

8、,因此编译程序不发出警告信息:word=(bHigh<<8)+bLow;word=bHigh<<(8+bLow);如果不专设注释则可写警告式注释:“如果两个运算符具有不同的优先级顺序并没被括号括起,那么就要发出一个警告。”这样的注释太贫,但你在思想上要明白这点。开发一个好的启发式注释,需要在计算机上运行大量的代码直到最后产生有用的结果。你肯定不希望对下面这些常见的惯用语也产生警告信息:word=bHigh*256+bLow;if(ch==‘’

9、

10、ch==‘t’

11、

12、ch==‘’)3)当编译程序发现两个连续的if语句其后跟有一个else语

13、句时,编译程序就会发出可能有悬挂else的警告信息:if(expression1)if(expression2)……else……if(expression1)if(expression2)……else……为了避免编译程序发出警告信息,可以用括号将内层if语句括起:if(expression1){if(expression2)……}else……if(expression1){if(expression2)……else……}4)将常量和表达式置于比较操作的左边是很有意义的,它提供了自动检查错误的有一个方法。但时,这种方法必须有一个操作数是常量或

14、表达式作为前提,如果两个操作数都是变量,这个方法就不起作用了。请注意,程序员在写代码的时候,一定要学会并记住使用这一技术。通过使用编译开关,编译程序将警告每一种可能的赋值错。特别是对于没有经验的程序员,编译开关更显得特别有作用。如果有编译开关,就一定要使用;如果没有,就把常量和表达式放在比较式的左边。5)为了防止误定义的预处理的宏产生不可预料的结果,编译(实际是预处理)程序应该具有一个开关允许程序员可以把无定义的宏用于错误情况。由于ANSI编译程序及支持老的#ifdef预处理指令,又支持新预处理的defined一元算子,那么就几乎没有必要将

15、无定义的宏“定义”为0。以下代码将会产生错误:/*建立目标等式*/#ifINTEL8080……#elifINTEL80x86……#elifMC6809……#elifMC680x0……#endif因此,应写为如下代码:/*建立目标等式*/#ifdefined(INTEL8080)……#elifdefined(INTEL80x86)……#elifdefined(MC6809)……#elifdefined(MC680x0)……#endif如果在#ifdef语句中使用了无定义的宏,此开关不会给出警告,因为这是有意安排的。第二章1)ASSERTMSG

16、宏的一种可能的实现是使它产生两个作用:一个是确认表达式,另一个是当断言否定时显示一个字符串。例如,若要打印memcpy的消息,应如以下形式调用ASSERTMSG:ASSERTMS

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

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

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