C潜规则篇之保持句法简单

    有些程序员总喜欢使用精简而紧凑的C语句,以为可以提高程序效率,或者单纯只为显示自己掌握高深的语法,如:

      return ((int)atou(str+((*str == ‘+’)?1:0)));

    这种写法简直让人抓狂,难道写点能让人看懂的代码很羞耻么?“? :”运算符效果等同于if-else语句,完全能分解得更直观:

     if(*str == '+')      str++;

     return ((int)atou(str));

    要知道,尽管C代码和相应机器码在统计意义的数量上存在一定比例关系,但并不适用于局部或单行代码,所以把原本简洁的多行代码硬挤在一行(一行清病)没有任何好处。写程序和写合同是两回事,故作高深地弄出一些稀奇古怪的表达方式,只会增加别人读代码的负担,招骂。尽量按正常人思维写代码吧,把令人费解的技巧”统统丢到垃圾桶去,如:

避免过于复杂的条件判断,包括:

    1)避免条件语句中的赋值操作,如:if(a=fun())  {……} 写成下面这样更清楚,且不宜出错:

    a=fun();

    if(a)  {……}

    2)避免用所谓短路求值简化条件语句,

    短路计算是一种策略,对于多个子表达式构成的复合表达式,如果多个子表达式的计算顺序确定,那只要前n个子式能确定整体表达式的值,剩余子式就不再计算。比如:

    if(*sdtr != ‘+’){

      if(str++){

        return ((int)atou(str));

      }

    }

    就可以利用短路求值,把两行if语句用“&&”操作符改成一行,即:

    if( (*sdtr != ‘+’) && str++ )  

      return ((int)atou(str));

    尽管基于C的短路求值规则,这两种写法等效,但集中代码到一行并不比用多条if语句更高效,却无疑使可读性更差,因而不可取,不如按部就班使用双层if语句。

    3) 尽量避免用否定方式的条件语句,如:

    if(!((ca<’0’)||(ca>’9’)))可改为if((ca>=’0’)&& (ca<=’9’) ),因为取反的条件逻辑上更多了一步,脑子里要打个转,不如正面判断合乎习惯,更加自然。

尽量少使用 ^=, /=等运算符,特别是位运算,而加减乘除和=号的结合用得比较多,多数人已习惯了。

避免多赋值语句,如x = y = z

少使用位域,用掩码位操作代替

 

    总之原则是:多动手,避免绕来饶去用脑,用脑要在关键的地方

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值