关于代码简洁性与可读性的悖论

 本来打算博客只记录自己学内核的历程,不过这个好歹和昨天的文章有点关联性,就一起发上来吧。

 

参看《c专家编程》,作者认同的是代码的可读性,而不应该尽量简洁,例如让我感触最深的就是结构体尽量不要通过typedef定义别名减少每次定义变量时一个"struct”。我认为这是很有道理的,尤其是编写大程序的时候,要相信,随着bug和新需求的出现,后期维护的时长很可能大于软件的编写时长,我们的目光应该看得更远。

 

今天看国人的书《高质量程序设计指南》,关于后面的习题有些地方个人觉得不太认同。

 

1.对if语句的判断。

 

作者对布尔、指针的判断都不一样。但是我觉得最好还是都用“==”或“!=”来判断,而不是在符号前面加“!”或不加来判断,因为这不如前面的表达更为稳重。至于浮点数作者建议用大于等于和小于等于联合判断,而不用“==”或“!=”来判断,因为个人平时编程使用浮点数较少,所以不好论之。

 

2.自己实现strcpy函数

原文如下:

 char* strcpy(char *strDest,const char *strSrc)

{

  assert()//...判断指针是否为空,

  char *address = strDest;

  while((*strDest++ = *strSrc++) != '/0')

      NULL;

  return address;

}

好吧,代码是简洁了,但是读起来脑袋就得多绕几个弯,while((*strDest++ = *strSrc++) != '/0'),作者在前言曾说过自己去微软研究院面试被此题难倒,面试官老说效率达不到。但是我觉得这样写也就不一定会比如下写有效率:

 

  while( *strSrc != '/0')

    {

          *strDest = *strSrc;

          strSrc++;

          strDest++;

     }

因为通过反汇编你会发现二者的汇编级实现都是一样的,所以无论从体积大小还是效率上讲我觉得都是一样。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值