MONTH / December, 2010

代码之初,性本丑?(上)

我是一个很在意代码质量的人,因为我相信软件开发,细节决定成败(追求细节和拥有宏观视野本身并不矛盾,而且这是另一个话题了)。虽然我并不赞成将团队甚至公司中的每个人的编码风格都硬性规范到某种统一格式,那样不仅会扼杀程序员们的创造力,而且从成本收益来看太不划算了。但是,这并不意味着代码就可以随心所欲地写,所谓“规范”不该是“法律”上的,但一定是“道德”上的:你现在写的代码,要对半年后的你负责,更要对团队里其他同事们负责,甚至可能还有你的客户。而这种责任,不仅仅是代码的功能完整度,更包括可读健壮效率

这几个月有幸参与了我们游戏提升稳定性和优化性能的工作,review了很多代码,这期间时长被各种“富有创造性的”代码雷得外焦里嫩的。碰巧正好看到了《代码之丑》系列文章,感触颇深,有些观点也有些自己的看法,记录下来,与大家探讨。

CONTINUE READING »


#include

译自 zeuxcg 的《#include 》(墙外),有删改。请勿转载。
若不听劝告非要转载,请注明出处,谢谢。

我们没法摆脱 C++,至少短期内不太可能。我真希望 C++ 里没有那么多恶心的特性,但目前也没有真正能取代 C++ 的玩意。现代编程语言往往采用大宗编译(bulk compilation)和/或智能链接器,但 C++ 仍然受困于头文件分离的设计思想(当然从另一方面说,C++ 的这种设计也使得其构建过程可以是增量的、高度并行的),使得鱼与熊掌不可兼得。 这种分离头文件并保持代码清晰的策略很显而易见,但我却很纳闷为啥还有那么多人没搞明白到底该怎么使用头文件,希望这篇文章能够进一步理清这团乱麻。本文也适用于 C,但有幸使用其他语言的同学们请绕行。

包含头文件的问题在于预编译器很笨:你的代码告诉它要包含某个文件,那么它就会“递归地”包含整个文件内容;如果你不想包含那个文件却又想用该文件中定义的一个符号呢,那你只有面对编译错误的份了;但你如果把所有头文件都包含进来,哼哼,编译的时候你就去数星星吧。

CONTINUE READING »