1.第一章 假象的编译程序
要点:
1) 使用Ansi C标准,有原型声明
2) 使用编译程序所有的可选设施
3) 使用lint来查出编译程序漏掉的错误
4) 如果有单元测试,一定要使用单元测试
练习题:
1) 加入使用了禁止在while条件部分进行赋值的编译程序选择项,
为什么可以查出下述代码中的运算符优先级
while(ch=getchar()!=EOF)
2) 看看你怎样使用编译器程序查出无意使用的空语句和赋值语句,
值得推荐的办法是进行相应的选择,是编译程序能够对下列常见问题
产生警告信息。怎样才能消除这些警告信息呢?
a) if(flight==063)这里程序员的本意是对63号航班进行测试,但因为
前面多个个0使063成了八进制数。结果变成对51号航班进行测试
b) if(pb != NULL & *pb != oxff) 这里不小心把&&键入为&,结果即使
pb等于NULL还会执行 *pb != oxff
c) quot = number/*pdenom.这里无意间多了个*号,结果使/*被解释为
注释的开始
d) word = bHigh << 8 + bLow,由于出现运算优先级错误,该语句被解释
成了 word = bHigh << (8+bLow).
3) 编译程序怎样才能对 “没有与之配对的else”之一错误过去警告?
用户怎么消除这一警告?
4)再看一次下面的代码:
if (ch == '/t')
ExpandTab();
出禁止在if语句中使用简单赋值的方法之外,能够查出这个错误的
另一种众所周知的方法是把赋值号两边的操作数颠倒过来:
if ('/t' == ch)
ExpandTab();
这个办法彻底么?为什么它的自动化程度不高?为什么新程序员
会用赋值号代替等号?
5)C的预处理器也可能引起某些意想不到的结果。如宏UNIT_MAX,
定义在limit.h中,如果忘了include,预处理器会到预定的替换成
0,怎么使预处理器报告这一错误?
#if UINT_MAX > 65535
...
#endif
Microsoft无错C程序秘诀 第一章 假象的编译程序
最新推荐文章于 2024-04-19 15:58:52 发布