以下轉載自:
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++變得更加複雜,更加學院派,通過模板 |