寒假期间,俺借了一本薄薄的《C/C++高质量程序设计指南》,书虽然小,但是内容十分精悍。学习了C++快一年多了,现在才发现自己写的程序弱爆了。例如编码风格,常见的注意事项等等,我都没有做到很好,而自己以前还缺乏编码量,编的程序乱七八糟。
翻看此书,我获益匪浅。从中我知道了一点点的软件工程的知识,包括对高质量的理解。高质量软件要做到许多方面,当然有时候也要在其中做出均衡。比如要确保软件的正确性、高效性、健壮性(我理解为容错性)、安全性、可读性、可移植性等等。以前我写程序,从来都不画流程图,写的时候也从来不考虑写得好不好,达到了以上的“高质量”要求没有。举个例子,之前我写条件判断语句都不知道有什么规则,无论变量是什么类型的都写成if (var == 0),然而书中告诉我各种类型有不同的写法,比如对于bool型的 if(var)或者if (!var),其他写法都是不符合规范的;int 类型的就是if (var == 0)或者if(var != 0),浮点类型的完全出乎我的意料,写法是if(var >= -EPSINON && var <= EPSINON ),而指针则和NULL比较。就从这一点,我就知道我以前一直都用隐含着错误的方法来写程序,虽然可能并没有导致程序出很大的问题,然而这和风格、高质量有关。
关于指针这一章,尤其是野指针的问题,之前我并没有注意,申请了一块内存只是拿来用,甚至常常忘了要销毁它。而现在我知道,指针这个东西很危险,有始也要有终,申请了别忘了销毁,销毁后别忘了置为NULL。其他变量也一样,变量的内存空间是从哪里来的是静态的还是堆的还是栈的,不同的类型有不同的处理方法,而且也要遵循有始有终。申请时初始化,销毁时也要注意。各类变量从哪里申请得来也大有讲究,如果是局部变量,是在栈中,是指针的话便不能做返回值。而且函数的参数、返回值有引用,指针,值传递等等多种,一不小心很容易犯错误。而懂得了其中的道理,也不会很难的。我希望自己能够将这些建议,一一在实践中体现,从而编写更好的代码。
书中讲了很多做人的道理,更用现身说法来启发我们认真学习,掌握好软件设计的内外功。令我佩服的是,作者在读本科的时候就十分勤恳努力地写软件。当他还不会用指针的时候就敢用数组等其他替代品编写上万行的程序。而且,在本科时期就用自己的双手带来了巨大的财富,同时带动了周围的其他人。而且作者林锐还是一个优秀的好学生,拿过不少奖。套用一句话,和他相比我们大多数人努力程度之低,根本没资格和人家拼,更不用说天赋了。时不时拿出这本书翻翻,都会发现很多对编程和人生大有裨益的东西,也许另外一本《effective C++》也有这样的内容,但是这本却显得比较亲切随和。
还有很多很多,不可能在这篇短文里面说清楚,但是这些规则是十分值得学习的。
by bibodeng 2012-02-07