Microsoft无错C程序秘诀 第一章 假象的编译程序

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值