Visual C++ 开发手记:让一切均可控制
Visual C++ 开发手记:让一切均可控制
版本:0.7
作者:catking
创建时间:March 14, 2008
(本来只是一些小想法,目前考虑修改完善中)
C语言的诞生,给了开发者一个选择。
C++ 在继承了C语言一些特性的同时,给予开发者更多的支持,使之能够更快捷的实现一些功能。各种可视化开发工具,更让开发成为一件轻松愉快的过程。
例如。ATL的智能指针(CComPtr, CComQIPtr),一定程度上提供了垃圾回收机制,大多数情况下,使开发者不必关心资源的释放。但是它也带来一些不良的副作用,比如,函数中随意的Return。
同时,如果使用智能指针作为全局的,或者在程序整个生命周期存在的的对象,为了保证在调用CoUninitialize之前释放,则必须强制给智能指针赋予NULL值,或显示的调用CComPtr::Release()方法。(注意,是".Release()"而不是"->Release()")。这时,实际上智能指针最得意的自动垃圾回收机制已经不存在了,那么,为什么要使用智能指针?相对而言,如果不是为了代码的统一,用一个标准的接口类型的指针来保存并自行维护更清晰和简洁。
再如,一些可视化编辑工具的使用,虽然可以得到所见即所得的特性,但是也使代码更加难以维护。
开发工具的不断增强,给开发者带来很多便利的同时,也养成了一些不良的习惯,很多人已经完全忘记了作为一名开发者,应该有的勤于思考和整洁的素质。而对于C++的开发者来说,使一切均可控制,并使其显得优雅,尤其重要。
出于以上的考虑,给出几条建议:
1. 不要使用Unicode编码的Resource文件。如果需要加入Unicode字符,请使用转义字符来实现。参考MSDN Topic: STRINGTABLE Resource. (http://msdn2.microsoft.com/en-us/library/aa381050(VS.85).aspx). 关于这一点,我要感谢 Vladislav Duma,不止这里,在很多方面,他都教给我十分有用的经验。
2. 将.h和对应的.cpp放在一起,除非这个.h需要发布
3. 如果在开发环境中你自己建立了源代码过滤器(Folder),建议删除开发环境为你自动建立的两个过滤器:Source File, Header File。当文件数量快速增长,它们可能使你消耗大量时间在寻找文件上。
4. 尽量不要依赖“自动”的开发工具,如果你不是对于辅助工具的输出结果完全清楚,那么,离开它。有时候,手工多花一点时间编写和组织代码付出的代价,远低于滥用自动工具带来的麻烦。
5. 消除 Warning。不要小看Warning,很有可能它就是造成一个严重错误的隐患。编译器并不能帮助你找出所有的错误,特别是逻辑错误。此外,大量的Warning输出,也会降低干扰你对错误的判断。所以,尽可能消除编译时的Warning,如果你可以确认一个Warning无法避免并且无害,那么,使用编译器指令禁止这个Warning
6. 给代码归类。模块化,不仅体现在Class上。类似功能的宏、全局函数,尽可能把它们放在一起,会更容易维护。避免四处出现,甚至出现多个副本。
7. 不要滥用智能指针。
"Simple is Good!" -- Vlad.
”简单就是美“,这是一句老话,没有想到,在讨论问题时,再次从 Vlad 口中听到。可爱的家伙。我用蹩脚的英语,他带着浓重的乌克兰口音,这并不妨碍我们的交流,虽然麻烦了点。 :)
参考:
Famous programming koans: http://www.catb.org/~esr/jargon/html/koans.html