“C++之父BS说林锐错了”之原因

偶然看到这么一篇文章,转载过来,等有空逐条分析一下,碰巧,BS和lr的书都在……

============================================== 

“C++之父BS说林锐错了”之原因

前天发了一个贴子“C++之父BS说林锐错了”
C++之父的C++圣经《C++程序设计语言 特别版》中说:
大家不要听某些人说判断指针是否为空用(p==NULL)或(p!=NULL)的格式,C++之父认为这样写是不好的,提倡直接写(p)或(!p)的形式。

林锐在国内程序员界也是大名鼎鼎的人物,有大作《高质量C++/C编程指南》,说判断指针是否为空要用(p==NULL)或(p!=NULL)的格式,别用(p)或(!p)的形式。

那么大家听谁的呢?

我认为是C++之父BS的正确。
理由暂且不说,读者可以自己想一下了。

-----------------
现在我说一下我的理由。

1.如果一个语言要程序员用p==NULL的形式来标志那是一个指针,那么这个语言的设计一定是拙劣的。
2.如果语言并不要求程序员用p==NULL的形式来标志那是一个指针,但程序的设计架构却要求,那么这个程序的设计架构一定是拙劣的。
3.如果语言与程序总体设计架构都不要求程序员用p==NULL的形式来标志那是一个指针,但是程序员自己却非要这么做才能容易的识别出指针,那么这个程序员的编程方式就一定是拙劣的。
4.如果语言、程序总体设计架构与程序员自己都不需要用p==NULL的形式来标志那是一个指针,但是还是仍然非要这样做,那简直……

类型信息不应当也没必要非在这里出现不可。99%的情况下在变量名本身中已经体现出来了,其余的是在环境中一目了然。

我用的是这种方式,
1.所有的逻辑0判断都是用(p)(!p)的方式。比如指针和用于逻辑标志的整型都是这样,当然bool型的也是这样,不过我还几乎没用过bool型呢。
2.仅与数字0在数学意义上进行比较时才写成(i==0)的形式。
比如if(i>0){...}else if(i==0){...}else {...};
不以数据类型区分比较的写法,而是以用途意义。说白了还是那句话,怎么想就怎么编,HTHC(“HOW THINKING HOW CODEING”),直接描述出来自己的思维。
逻辑判断就用(p)(!p),数字判断就用(p==0)(p!=0)也可以用(p)(!p),就这么简单。
如果都用成了(p)(!p)还有一个好处,一见到这样的就知道是在与0比较呢。识别非常快。

用那种NULL的形式,多输入一个字符就给以后维护时增加一点麻烦,多输入一个字符的本身也给编程多带来了一点麻烦,如果问这点麻烦怕什么,可是在高度复杂严谨的思维过程中不希望有任何这样无用冗余麻烦,任何这样的麻烦都会干扰思路。

至于NULL==p的形式,表面上这是可以防止if(p=NULL),但是现在编译器完全可以对这样的提出warning,而且有许多成熟的代码工具可以检测出这些异常代码,小时候我还不知道有这样的工具曾经自己写了一个。
要知道流畅思维描述形式往往是p==NULL,那么写成NULL==p就干扰了这种流畅的思维,虽然仅仅是一点点,但是在高度复杂严谨的思维过程中要求的是一点点这样的干扰都不要有,这样写就干扰了代码的直接表义性,违反了“怎么想就怎么编”,违反了“最小惊讶原则”。

甚至连const我也是尽量避免使用,如果一个程序需要用const去维护其健壮性,那么说明这个程序的整体设计有问题,我认为程序员不应该依赖这些来给自己的程序查错,这样的依赖往往带来更大的隐患。

总之,写有自描述能力的代码,HTHC。

(还有几点,现在暂时想不起来了,等想起来了补上) 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值