本来打算博客只记录自己学内核的历程,不过这个好歹和昨天的文章有点关联性,就一起发上来吧。
参看《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++;
}
因为通过反汇编你会发现二者的汇编级实现都是一样的,所以无论从体积大小还是效率上讲我觉得都是一样。