以下转载自:
http://blog.csdn.net/shendl/archive/2008/01/16/2046855.aspx
C++资源之不完全导引(完整版) |
C++资源之不完全导引(完整版) 来源:www.csdn.net 撰文:曾毅、陶文 声明:本文2004年5月首发于《CSDN开发高手》,版权归该杂志与《程序员》杂志社 ------------------------------------------------------------------------ 1,前言 无数次听到“我要开始学习C++!”的呐喊,无数次听到“C++太复杂了,我真的 撰写本文的初衷并不打算带领大家体验古老的C++历史,如果你想了解C++的历 本文介绍并分析了一些编译器,开发环境,库,少量的书籍以及参考网站,并 ------------------------------------------------------------------------ 2,编译器 在C++之外的任何语言中,编译器都从来没有受到过如此之重视。因为C++是一 2.1 Borland C++ 这个是Borland C++ Builder和Borland C++ Builder X这两种开发环境的后台 2.2 Visual C++ 这个正是我们熟知的Visual Studio 和 Visual Studio.net 2002, 2003以及2 2.3 GNU C++ 著名的开源C++编译器。是类Unix操作系统下编写C++程序的首选。特点是有非 基于GNU C++的编译器有很多,比如: (1) Mingw GCC的一个Windows的移植版本(Dev-C++的后台) (2) Cygwin http://sources.redhat.com/cygwin/ GCC的另外一个Windows移植版本是Cygwin的一部分,Cygwin是Windows下的一个 (3) Djgpp 这是GCC的DOS移植版本。 (4) RSXNT http://www.mathematik.uni-bielefeld.de/~rainer/ 这是GCC的DOS和Windows移植版本。 (5) Intel C++ 著名CPU制造厂商Intel出品的编译器,Special Design for Intel x86!对于 (6) Digital Mars C++ 网络上提供免费下载,Zortech/Symantec C++的继承者,其前身在当年惨烈的 ------------------------------------------------------------------------ 3,开发环境 开发环境对于程序员的作用不言而喻。选择自己朝夕相处的环境也不是容易的 3.1 Visual Studio 6.0 这个虽然是Microsoft公司的老版本的开发环境,但是鉴于其后继版本Visual 3.2 Visual Studio.NET 2003 作为Microsoft公司官方正式发布的最新版本开发环境,其中有太多激动人心的 3.3 Borland C++ Builder 6 这个并不是Borland的C++开发环境的最新版本。选择它的原因是它不是用Java 3.4 Borland C++ Builder X 正如前文所述,虽然版本号上和前面那个IDE非常相象,但是其实它们是完全不 3.5 Emacs + GCC 前面讲的大部分是Windows环境下的集成开发环境。Linux上的开发者更倾向于 3.6 Dev C++ GCC是一个很好的编译器。在Windows上的C++编译器一直和标准有着一段距离的 3.7 Eclipse + CDT Eclipse可是近来大名鼎鼎的开发工具。最新一期的Jolt大奖就颁给了这个杰出 ------------------------------------------------------------------------ 4,工具 C++的辅助工具繁多,我们分门别类的为大家作介绍: 4.1 文档类 (1) Doxygen Doxygen是一种适合C风格语言(如C++、C、IDL、Java甚至包括C#和PHP)的、 (2) C++2HTML 参考站点:http://www.bedaux.net/cpp2html/ 把C++代码变成语法高亮的HTML (3) CodeColorizer 参考站点:http://www.chami.com/colorizer/ 它能把好几种语言的源代码着色为HTML (4) Doc-O-Matic 参考站点:http://www.doc-o-matic.com/ Doc-O_Matic为你的C/C++,C++.net,Delphi/Pascal, VB.NET,C#和Java程序 (5) DocVizor 参考站点:http://www.ucancode.net/Products/DocBuilder/Features.htm DocVizor满足了面向对象软件开发者的基本要求——它让我们能够看到C++工程 (6) SourcePublisher C++ 参考站点:http://www.scitools.com/sourcepublisher_c.html 给源代码产生提供快速直观的HTML报表,包括代码,类层次结构,调用和被调 (7) Understand 参考站点:http://www.scitools.com/ucpp.html 分析任何规模的C或者C++工程,帮助我们更好的理解以及编写文档。 4.2 代码类 (1) CC-Rider CC-Rider是用于C/C++程序强大的代码可视化工具,通过交互式浏览、编辑及自 (2) CodeInspect 一种新的C/C++代码分析工具。它检查我们的源代码找出非标准的,可能的,以 (3) CodeWizard 先进的C/C++源代码分析工具,使用超过500个编码规范自动化地标明危险的, (4) C++ Validation Test Suites 参考站点:http://www.plumhall.com/suites.html 一组用于测试编译器和库对于标准吻合程度的代码库。 (5) CppRefactory 参考站点:http://cpptool.sourceforge.net/ CPPRefactory是一个使得开发者能够重构他们的C++代码的程序。目的是使得C (6) Lzz 参考站点:http://www.lazycplusplus.com/ Lzz是一个自动化许多C++编程中的体力活的工具。它能够节省我们许多事件并 (7) QA C++ Generation 2000 参考站点:http://www.programmingresearch.com/solutions/qacpp.htm 它关注面向对象的C++源代码,对有关于设计,效率,可靠性,可维护性的部分 (8) s-mail project - Java to C++DOL 参考站点:http://sadlocha.strefa.pl/s-mail/ja2dol.html 把Java源代码翻译为相应的C++源代码的命令行工具。 (9) SNIP from Cleanscape Software International 参考站点:http://www.cleanscape.net/stdprod/snip/index.html 一个填平编码和设计之间沟壑的易于使用的C++开发工具,节省大量编辑和调试 (10) SourceStyler C++ 参考站点:http://www.ochresoftware.com/ 对C/C++源代码提供完整的格式化和排版控制的工具。提供多于75个的格式化选 4.3 编译类 (1) Compilercache 参考站点:http://www.erikyyy.de/compilercache/ Compilercache是一个对你的C和C++编译器的封装脚本。每次我们进行编译,封 (2) Ccache Ccache是一个编译器缓存。它使用起来就像C/C++编译器的缓存预处理器,编译 (3) Cmm (C++ with MultiMethods) 参考站点:http://www.op59.net/cmm/cmm-0.28/users.html 这是一种C++语言的扩展。读入Cmm源代码输出C++的源代码,功能是对C++语言 (4) The Frost Project Forst使得你能够在C++程序中像原生的C++特性一样使用multimethod以及虚函 4.4 测试和调试类 (1) CPPUnit CppUnit 是个基于 LGPL 的开源项目,最初版本移植自 JUnit,是一个非常优 (2) C++Test C++ Test是一个单元测试工具,它自动化了C和C++类,函数或者组件的测试。
参考站点:http://www.iplbath.com/products/tools/pt400.shtml 设计的目的是为了满足在合理的经济开销下使用这个工具可以让开发工程师开 (4) Purify 参考站点:http://www-900.ibm.com/cn/software/rational/products/purif IBM Rational PurifyPlus是一套完整的运行时分析工具,旨在提高应用程序的 (5) BoundsChecker BoundsChecker是一个C++运行时错误检测和调试工具。它通过在Visual Studi 一个自动化的运行时程序测试工具,检查难以察觉的错误,如内存覆盖,内存泄 (7) GlowCode GlowCode包括内存泄漏检查,code profiler,函数调用跟踪等功能。给C++开 (8) Stack Spy 参考站点:http://www.imperioustech.com/ 它能捕捉stack corruption, stack over run, stack overflow等有关栈的错 ------------------------------------------------------------------------ 5,库 在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了 5.1 标准库 标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年 (1) Dinkumware C++ Library 参考站点:http://www.dinkumware.com/ P.J. Plauger编写的高品质的标准库。P.J. Plauger博士是Dr. Dobb's程序设 (2) RogueWave Standard C++ Library 参考站点:http://www.roguewave.com/ 这个库在Borland C++ Builder的早期版本中曾经被采用,后来被其他的库给替 (3) SGI STL 参考站点:http://www.roguewave.com/ SGI公司的C++标准模版库。 (4) STLport SGI STL库的跨平台可移植版本。 5.2 “准”标准库 - Boost 参考站点:http://www.boost.org 国内镜像:http://www.c-view.org/tech/lib/boost/index.htm Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后 Boost中比较有名气的有这么几个库: Regex 正则表达式库 Spirit LL parser framework,用C++代码直接表达EBNF Graph 图组件和算法 Lambda 在调用的地方定义短小匿名的函数对象,很实用的functional功能 concept check 检查泛型编程中的concept Mpl 用模板实现的元编程框架 Thread 可移植的C++多线程库 Python 把C++类和函数映射到Python之中 Pool 内存池管理 smart_ptr 5个智能指针,学习智能指针必读,一份不错的参考是来自CUJ的文章: Smart Pointers in Boost,哦,这篇文章可以查到,CUJ是提供在线浏览的。 Boost总体来说是实用价值很高,质量很高的库。并且由于其对跨平台的强调, 5.3 GUI 在众多C++的库中,GUI部分的库算是比较繁荣,也比较引人注目的。在实际开 (1) MFC 大名鼎鼎的微软基础类库(Microsoft Foundation Class)。大凡学过VC++的 (2) QT 参考网站:http://www.trolltech.com/ Qt是Trolltech公司的一个多平台的C++图形用户界面应用程序框架。它提供给 (3) WxWindows 参考网站:http://www.wxwindows.org/ 跨平台的GUI库。因为其类层次极像MFC,所以有文章介绍从MFC到WxWindows的 (4) Fox 参考网站:http://www.fox-toolkit.org/ 开放源代码的GUI库。作者从自己亲身的开发经验中得出了一个理想的GUI库应 基于ATL的一个库。因为使用了大量ATL的轻量级手法,模板等技术,在代码尺 (6) GTK 参考网站:http://gtkmm.sourceforge.net/ GTK是一个大名鼎鼎的C的开源GUI库。在Linux世界中有Gnome这样的杀手应用。 5.4 网络通信 (1) ACE 参考网站:http://www.cs.wustl.edu/~schmidt/ACE.html C++库的代表,超重量级的网络通信开发框架。ACE自适配通信环境(Adaptive (2) StreamModule 参考网站:http://www.omnifarious.org/StrMod/ 设计用于简化编写分布式程序的库。尝试着使得编写处理异步行为的程序更容 (3) SimpleSocket 参考网站:http://home.hetnet.nl/~lcbokkers/simsock.htm 这个类库让编写基于socket的客户/服务器程序更加容易。 (4) A Stream Socket API for C++ 参考网站:http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.h 又一个对Socket的封装库。 5.5 XML (1) Xerces 参考网站:http://xml.apache.org/xerces-c/ Xerces-C++ 是一个非常健壮的XML解析器,它提供了验证,以及SAX和DOM API (2) XMLBooster 参考网站:http://www.xmlbooster.com/ 这个库通过产生特制的parser的办法极大的提高了XML解析的速度,并且能够产 (3) Pull Parser 参考网站:http://www.extreme.indiana.edu/xgws/xsoap/xpp/ 这个库采用pull方法的parser。在每个SAX的parser底层都有一个pull的parse
参考网站:http://xml.apache.org/xalan-c/ Xalan是一个用于把XML文档转换为HTML,纯文本或者其他XML类型文档的XSLT处 (5) CMarkup 参考网站:http://www.firstobject.com/xml.htm 这是一种使用EDOM的XML解析器。在很多思路上面非常灵活实用。值得大家在D (6) libxml++ http://libxmlplusplus.sourceforge.net/ libxml++是对著名的libxml XML解析器的C++封装版本 5.6 科学计算 (1) Blitz++ 参考网站:http://www.oonumerics.org/blitz/ Blitz++ 是一个高效率的数值计算函数库,它的设计目的是希望建立一套既具 (2) POOMA 参考网站:http://www.codesourcery.com/pooma/pooma POOMA是一个免费的高性能的C++库,用于处理并行式科学计算。POOMA的面向对 (3) MTL 参考网站:http://www.osl.iu.edu/research/mtl/ Matrix Template Library(MTL)是一个高性能的泛型组件库,提供了各种格式 (4) CGAL 参考网站:www.cgal.org Computational Geometry Algorithms Library的目的是把在计算几何方面的大 5.7 游戏开发 (1) Audio/Video 3D C++ Programming Library 参考网站:http://www.galacticasoftware.com/products/av/ AV3D是一个跨平台,高性能的C++库。主要的特性是提供3D图形,声效支持(S (2) KlayGE 参考网站:http://home.g365.net/enginedev/ 国内游戏开发高手自己用C++开发的游戏引擎。KlayGE是一个开放源代码、跨平 (3) OGRE OGRE(面向对象的图形渲染引擎)是用C++开发的,使用灵活的面向对象3D引擎 5.8 线程 (1) C++ Threads 参考网站:http://threads.sourceforge.net/ 这个库的目标是给程序员提供易于使用的类,这些类被继承以提供在Linux环境 (2) ZThreads 参考网站:http://zthread.sourceforge.net/ 一个先进的面向对象,跨平台的C++线程和同步库。 5.9 序列化 (1) s11n 参考网站:http://s11n.net/ 一个基于STL的C++库,用于序列化POD,STL容器以及用户定义的类型。 (2) Simple XML Persistence Library 参考网站:http://sxp.sourceforge.net/ 这是一个把对象序列化为XML的轻量级的C++库。 5.10 字符串 (1) C++ Str Library 参考网站:http://www.utilitycode.com/str/ 操作字符串和字符的库,支持Windows和支持gcc的多种平台。提供高度优化的 (2) Common Text Transformation Library 参考网站:http://cttl.sourceforge.net/ 这是一个解析和修改STL字符串的库。CTTL substring类可以用来比较,插入, (3) GRETA 参考网站:http://research.microsoft.com/projects/greta/ 这是由微软研究院的研究人员开发的处理正则表达式的库。在小型匹配的情况 5.11 综合 (1) P::Classes 参考网站:http://pclasses.com/ 一个高度可移植的C++应用程序框架。当前关注类型和线程安全的signal/slot (2) ACDK - Artefaktur Component Development Kit 参考网站:http://acdk.sourceforge.net/ 这是一个平台无关的C++组件框架,类似于Java或者.NET中的框架(反射机制, (3) dlib C++ library 参考网站:http://www.cis.ohio-state.edu/~kingd/dlib/ 各种各样的类的一个综合。大整数,Socket,线程,GUI,容器类,以及浏览目 (4) Chilkat C++ Libraries 参考网站:http://www.chilkatsoft.com/cpp_libraries.asp 这是提供zip,e-mail,编码,S/MIME,XML等方面的库。 (5) C++ Portable Types Library (PTypes) 参考网站:http://www.melikyan.com/ptypes/ 这是STL的比较简单的替代品,以及可移植的多线程和网络库。 (6) LFC 参考网站:http://lfc.sourceforge.net/ 哦,这又是一个尝试提供一切的C++库 5.12 其他库 (1) Loki 参考网站:http://www.moderncppdesign.com/ 哦,你可能抱怨我早该和Boost一起介绍它,一个实验性质的库。作者在loki中 (2) ATL ATL(Active Template Library) 是一组小巧、高效、灵活的类,这些类为创建可互操作的COM组件提供了基本的 (3) FC++: The Functional C++ Library 这个库提供了一些函数式语言中才有的要素。属于用库来扩充语言的一个代表 (4) FACT! 参考网站:http://www.kfa-juelich.de/zam/FACT/start/index.html 另外一个实现函数式语言特性的库 (5) Crypto++ 提供处理密码,消息验证,单向hash,公匙加密系统等功能的免费库。 还有很多非常激动人心或者是极其实用的C++库,限于我们的水平以及文章的篇 ------------------------------------------------------------------------ 6,书籍 以前熊节先生曾撰文评论相对于Java程序设计语言,C++的好书多如牛毛。荣耀 http://www.royaloo.com/articles/articles_2003/9CppBooks.htm 下面几本书对于走在C++初学之路上的读者是我们最愿意推荐给大家的: (1) 《C++ Primer》 哦,也许你会抱怨我们为什么不先介绍TCPL,但对于走在学习之路上的入门者, (2) 《Essential C++》 如果说《C++ Primer》是C++领域的超级宝典,那么此书作为掌握C++的大局观 (3) 《The C++ Programming Language》 Bjarne为你带来的C++教程,真正能够告诉你怎么用才叫真正的C++的唯一一本 (4) 《Effective C++》,《More Effective C++》 是的,正如一些C++爱好者经常以读过与没有读过上述两本作品来区分你是否是 技术书籍仁者见仁,过多的评论反无太多意义,由读者喜好选择最适合自己的 ------------------------------------------------------------------------ 7,资源网站 正如我们可以通过计算机历史上的重要人物了解计算机史的发展,C++相关人物 (2) Stanley B. Lippman (3) Scott Meyers (4) David Musser (5) Bruce Eckel (6) Nicolai M. Josuttis (7) Herb Sutter (8) Andrei Alexandrescu (9) 侯捷先生 (10) 孟岩先生 (11) 荣耀先生 (12) 潘爱民先生 除了上述大师的主页外,以下的综合类C++学习参考站点是我们非常愿意向大家 (1) CodeProject (2) CodeGuru (3) Dr. Dobb's Journal (4) C/C++ Users Journal (5) C维视点 (6) allaboutprogram (1) ISO IEC JTC1/SC22/WG21 - C++:标准C++的权威参考 (2) C++ FAQ LITE — Frequently Asked Questions: 最为全面的C++FAQ (1) .alt.comp.lang.learn.c-c++ (2) .comp.lang.c++.moderated (3) .comp.std.c++ ------------------------------------------------------------------------ 8,不得不写的结束语 结束的时候也是总结现状,展望未来的时候。虽然C++从脱胎于C开始,一路艰 C++在面向企业的软件开发中,在开发便捷性等方面的确要比Java和C#差很多, 从C++目前的活跃程度,以及应用现状来说是完全能够肯定C++仍然是软件工业 需要看到的是两个趋势,一个趋势是C++变得更加复杂,更加学院派,通过模板 |