.本文2004年5月首發于《CSDN開發高手》,版權歸該雜志與《程序員》雜志社所有。雜志
限于篇幅部分內容有所刪節,此處版本為相對完整版本。
?
前言。
撰寫本文的初衷并不打算帶領大家體驗古老的C++歷史,如果你想了解C++的歷史與其前期
發展中諸多技術的演變,你應當去參考Bjarne的《The?Design?and?Evolution?of?C++》。
當然也不打算給大家一個無所不包的寶典(并非不想:其一是因水平有限,其二無奈C++之
博大精深),所給出的僅僅是一些我們認為對于想學習C++的廣大讀者來說最重要并且觸手
可及的開發與學習資源。
本文介紹并分析了一些編譯器,開發環境,庫,少量的書籍以及參考網站,并且盡可能嘗
試著給出一個利用這些資源的導引,望對如同我們一樣的初學者能夠有所裨益。
編譯器
在C++之外的任何語言中,編譯器都從來沒有受到過如此之重視。因為C++是一門相當復雜
的語言,所以編譯器也難于構建。直到最近我們才開始能夠使用上完全符合C++標準的編譯
器(哦,你可能會責怪那些編譯器廠商不能盡早的提供符合標準的編譯器,這只能怪他們
各自維系著自身的一套別人不愿接受的標準)。什么?你說這無關緊要?哦,不,你所需
要的是和標準化C++高度兼容的編譯環境。長遠來看,只有這樣的編譯器對C++開發人員來
說才是最有意義的工具,尤其是對于程序設計語言的學習者。一至性讓代碼具備可移植性
,并讓一門語言及其庫的應用更為廣泛。嗯,是的,我們這里只打算介紹一些公認的優秀
編譯器。
Borland?C++
這個是Borland?C++?Builder和Borland?C++?Builder?X這兩種開發環境的后臺編譯器。(
哦,我之所以將之分為兩種開發環境你應當能明白為什么,正如Delphi7到Delphi8的轉變
,是革命性的兩代。)Borland?C++由老牌開發工具廠商Borland傾力打造。該公司的編譯
器素以速度快,空間效率高著稱,Borland?C++?系列編譯器秉承了這個傳統,屬于非常優
質的編譯器。標準化方面早在5.5版本的編譯器中對標準化C++的兼容就達到了92.73%。目
前最新版本是Borland?C++?Builder?X中的6.0版本,官方稱100%符合ANSI/ISO的C++標準以
及C99標準。嗯...這正是我前面所指的"完全符合C++標準的編譯器"。
Visual?C++
這個正是我們熟知的Visual?Studio?和?Visual?Studio.net?2002,?2003以及2005?Whidbe
y中帶的C++編譯器。由Microsoft公司研制。在Visual?Studio?6.0中,因為編譯器有太多
地方不能與后來出現的C++標準相吻合而飽受批評(想想你在使用STL的時候編譯時報出的
那些令人厭惡的error和warning吧)。VC++6.0對標準化C++的兼容只有83.43%。但是隨著
C++編譯器設計大師Stanley?Lippman以及諸多C++社群達人的加盟,在Visual?Studio.NET
?2003中,Visual?C++編譯器已經成為一個非常成熟可靠的C++編譯器了。Dr.Dobb's?Jour
nal的評測顯示Visual?C++7.1對標準C++的兼容性高達98.22%,一度成為CBX之前兼容性最
好的編譯器。結合強大的Visual?Studio.NET開發環境,是一個非常不錯的選擇。至于Whi
dbey時代的Visual?C++,似乎微軟所最關注的是C++/CLI......我們不想評論微軟下一代的
C++編譯器對標準化兼容如何,但他確實越來越適合.NET?(其實你和我的感覺可能是一樣的
,微軟不應當把標準C++這塊肥肉丟給Borland,然而微軟可能并不這樣認為)。
GNU?C++
著名的開源C++編譯器。是類Unix操作系統下編寫C++程序的首選。特點是有非常好的移植
性,你可以在非常廣泛的平臺上使用它,同時也是編寫跨平臺,嵌入式程序很好的選擇。
另外在符合標準這個方面一直都非常好,GCC3.3大概能夠達到96.15%。但是由于其跨平臺
的特性,在代碼尺寸速度等優化上略微差一點。
基于GNU?C++的編譯器有很多,比如:
l??????????Mingw:http://www.mingw.org/
GCC的一個Windows的移植版本(Dev-C++的后臺)
l??????????Cygwin:http://sources.redhat.com/cygwin/
GCC的另外一個Windows移植版本是Cygwin的一部分,Cygwin是Windows下的一個Unix仿真環
境。嚴格的說是模擬GNU的環境,這也就是"Gnu's?Not?Unix"要表達的意思,噢,扯遠了,
這并不是我們在這里關心的實質內容。
l??????????Djgpp:http://www.delorie.com/djgpp/
這是GCC的DOS移植版本。
l??????????RSXNT:http://www.mathematik.uni-bielefeld.de/~rainer/
這是GCC的DOS和Windows移植版本。
Intel?C++
著名CPU制造廠商Intel出品的編譯器,Special?Design?for?Intel?x86!對于Intel?x86結
構的CPU經過特別的優化。在有些應用情況下,特別是數值計算等高性能應用,僅僅采用I
ntel的編譯器編譯就能大幅度的提高性能。
Digital?Mars?C++
網絡上提供免費下載,Zortech/Symantec?C++的繼承者,其前身在當年慘烈的C++四國戰中
也是主角之一。
?
開發環境
開發環境對于程序員的作用不言而喻。選擇自己朝夕相處的環境也不是容易的事情,特別
是在IDE如此豐富的情況下。下面就是我們推薦的一些常見的C++開發環境,并沒有包括一
些小型的,罕見的IDE。其中任何一款都是功能豐富,可以用作日常開發使用的。對于不同
層面的開發者,請參見內文關于適用對象的描述。
?
Visual?Studio?6.0
這個雖然是Microsoft公司的老版本的開發環境,但是鑒于其后繼版本Visual?Studio.NET
的龐大身軀,以及初學者并不那么高的功能要求,所以推薦這個開發環境給C++的初學者,
供其學習C++的最基本的部分,比如C的那部分子集,當然你別指望他能夠支持最新的C99標
準。在日常的開發中,仍然有很多公司使用這個經典穩定的環境,比如筆者就看曾親見有
些公司將其編譯器替換為GCC做手機開發之用。
Visual?Studio.NET?2003
作為Microsoft公司官方正式發布的最新版本開發環境,其中有太多激動人心的功能。結合
其最新的C++編譯器。對于機器配置比較好的開發人員來說,使用這個開發環境將能滿足其
大部分的要求。這里不打算單獨說Visual?Studio?Whidbey,雖然Visual?Studio?.NET?200
5?-?Whidbey社區預覽版已經推出,但暫不是很穩定,讀者可以親身去體驗。
Borland?C++?Builder?6
這個并不是Borland的C++開發環境的最新版本。選擇它的原因是它不是用Java寫的IDE,速
度比較快。它有一個很完善的GUI窗體設計器,和Delphi共用一個VCL。由于這些特點,比
較適合初學者上手。但是由于其GUI的中心位置,可能不利于對于C++語言的學習。而且其
為了支持VCL這個Object?Pascal寫的庫也對C++進行了一些私有的擴充。使得人們有一個不
得不接受的事實:"Borland?C++?Builder?6的高手幾乎都是Delphi高手"。
Borland?C++?Builder?X
正如前文所述,雖然版本號上和前面那個IDE非常相象,但是其實它們是完全不同的兩個集
成開發環境。C++Builder更多的是一個和Delphi同步的C++版本的開發環境,C++BuilderX
則是完全從C++的角度思考得出的一個功能豐富的IDE。其最大的特點是跨平臺,跨編譯器
,多種Framework的集成,并且有一個WxWindows為基礎的GUI設計器。尤其是采用了純C++
來重寫了整個Framework,摒棄了以前令人無奈的版本。對于C++的開發來說,從編譯器,到
庫,到功能集成都是非常理想的。可以預見,Borland?C++?Builder?X?2.0很值得C++愛好
者期待。唯一令人難堪之處是作為一個C++的開發工具,其IDE是用Java寫的,在配置不夠
理想的機器上請慎重考慮再安裝。
?
Emacs?+?GCC
前面講的大部分是Windows環境下的集成開發環境。Linux上的開發者更傾向于使用Emacs來
編輯C++的文件,用Makefile來命令GCC做編譯。雖然看上去比較松散,但是這些東西綜合
起來還是一個開0發環境。如果你能夠嫻熟的使用這樣的環境寫程序,你的水平應該足夠指
導我們來寫這篇陋文了。
?
Dev?C++
GCC是一個很好的編譯器。在Windows上的C++編譯器一直和標準有著一段距離的時候,GCC
就是一個讓Windows下開發者流口水的編譯器。Dev-C++就是能夠讓GCC跑在Windows下的工
具,作為集成開發環境,還提供了同專業IDE相媲美的語法高亮,代碼提示,調試等功能。
由于使用Delphi開發,占用內存少,速度很快,比較適合輕量級的學習和使用。
?
Eclipse?+?CDT
Eclipse可是近來大名鼎鼎的開發工具。最新一期的Jolt大獎就頒給了這個杰出的神物。說
其神奇是因為,它本身是用Java寫的,但是擁有比一般Java寫的程序快得多的速度。而且
因為其基于插件組裝一切的原則,使得能夠有CDT這樣的插件把Eclipse變成一個C/C++的開
發環境。如果你一直用Eclipse寫Java的程序,不妨用它體驗一下C++開發的樂趣。
?
工具
C++的輔助工具繁多,我們分門別類的為大家作介紹:
文檔類
Doxygen
參考站點:http://www.doxygen.org/
????Doxygen是一種適合C風格語言(如C++、C、IDL、Java甚至包括C#和PHP)的、開放源
碼的、基于命令行的文檔產生器。
C++2HTML
參考站點:http://www.bedaux.net/cpp2html/
把C++代碼變成語法高亮的HTML
CodeColorizer
參考站點:http://www.chami.com/colorizer/
????它能把好幾種語言的源代碼著色為HTML
Doc-O-Matic
參考站點:http://www.doc-o-matic.com/
Doc-O_Matic為你的C/C++,C++.net,Delphi/Pascal,?VB.NET,C#和Java程序或者組件產
生準確的文檔。Doc-O-Matic使用源代碼中的符號和注釋以及外部的文檔文件創建與流行的
文檔樣式一致的文檔。
DocVizor
參考站點:http://www.ucancode.net/Products/DocBuilder/Features.htm
DocVizor滿足了面向對象軟件開發者的基本要求——它讓我們能夠看到C++工程中的類層次
結構。DocVizor快速地產生完整可供打印的類層次結構圖,包括從第三方庫中來的那些類
,除此之外DocVizor還能從類信息中產生HTML文件。
SourcePublisher?C++
參考站點:http://www.scitools.com/sourcepublisher_c.html
給源代碼產生提供快速直觀的HTML報表,包括代碼,類層次結構,調用和被調用樹,包含
和被包含樹。支持多種操作系統。
Understand
參考站點:http://www.scitools.com/ucpp.html
分析任何規模的C或者C++工程,幫助我們更好的理解以及編寫文檔。
代碼類
CC-Rider
參考站點:http://www.cc-rider.com
CC-Rider是用于C/C++程序強大的代碼可視化工具,通過交互式瀏覽、編輯及自動文件來促
進程序的維持和發展。
CodeInspect
參考站點:http://www.yokasoft.com/
一種新的C/C++代碼分析工具。它檢查我們的源代碼找出非標準的,可能的,以及普通的錯
誤代碼。
CodeWizard
參考站點:http://www.parasoft.com
先進的C/C++源代碼分析工具,使用超過500個編碼規范自動化地標明危險的,但是編譯器
不能檢查到的代碼結構。
C++?Validation?Test?Suites
參考站點:http://www.plumhall.com/suites.html
一組用于測試編譯器和庫對于標準吻合程度的代碼庫。
CppRefactory
參考站點:http://cpptool.sourceforge.net/
?????????CPPRefactory是一個使得開發者能夠重構他們的C++代碼的程序。目的是使得C+
+代碼的重構能夠盡可能的有效率和簡單。
Lzz
參考站點:http://www.lazycplusplus.com/
?????????Lzz是一個自動化許多C++編程中的體力活的工具。它能夠節省我們許多事件并且
使得編碼更加有樂趣。給出一系列的聲明,Lzz會給我們創建頭文件和源文件。
QA?C++?Generation?2000
參考站點:http://www.programmingresearch.com/solutions/qacpp.htm
它關注面向對象的C++源代碼,對有關于設計,效率,可靠性,可維護性的部分提出警告信
息。
s-mail?project?-?Java?to?C++DOL
參考站點:http://sadlocha.strefa.pl/s-mail/ja2dol.html
把Java源代碼翻譯為相應的C++源代碼的命令行工具。
SNIP?from?Cleanscape?Software?International
參考站點:http://www.cleanscape.net/stdprod/snip/index.html
一個填平編碼和設計之間溝壑的易于使用的C++開發工具,節省大量編輯和調試的事件,它
還使得開發者能夠指定設計模式作為對象模型,自動從對象模型中產生C++的類。
SourceStyler?C++
參考站點:http://www.ochresoftware.com/
對C/C++源代碼提供完整的格式化和排版控制的工具。提供多于75個的格式化選項以及完全
支持ANSI?C++。
編譯類
Compilercache
參考站點:http://www.erikyyy.de/compilercache/
Compilercache是一個對你的C和C++編譯器的封裝腳本。每次我們進行編譯,封裝腳本,把
編譯的結果放入緩存,一旦編譯相同的東西,結果將從緩存中取出而不是再次編譯。
Ccache
參考站點:http://ccache.samba.org/
Ccache是一個編譯器緩存。它使用起來就像C/C++編譯器的緩存預處理器,編譯速度通常能
提高普通編譯過程的5~10倍。
Cmm?(C++?with?MultiMethods)
參考站點:http://www.op59.net/cmm/cmm-0.28/users.html
?????????這是一種C++語言的擴展。讀入Cmm源代碼輸出C++的源代碼,功能是對C++語言添
加了對multimethod的支持。
The?Frost?Project
參考站點:http://frost.flewid.de/
Forst使得你能夠在C++程序中像原生的C++特性一樣使用multimethod以及虛函數參數。它
是一個編譯器的外殼。
?
測試和調試類
CPPUnit
?????????CppUnit?是個基于?LGPL?的開源項目,最初版本移植自?JUnit,是一個非常優秀
的開源測試框架。CppUnit?和?JUnit?一樣主要思想來源于極限編程。主要功能就是對單元
測試進行管理,并可進行自動化測試。
C++Test
參考站點:http://www.parasoft.com/
?????????C++?Test是一個單元測試工具,它自動化了C和C++類,函數或者組件的測試。
Cantata++
參考站點:http://www.iplbath.com/products/tools/pt400.shtml
設計的目的是為了滿足在合理的經濟開銷下使用這個工具可以讓開發工程師開展單元測試
和集成測試的需求.
Purify
參考站點:http://www-900.ibm.com/cn/software/rational/products/purifyplus/inde
x.shtml
IBM?Rational?PurifyPlus是一套完整的運行時分析工具,旨在提高應用程序的可靠性和性
能。PurifyPlus將內存錯誤和泄漏檢測、應用程序性能描述、代碼覆蓋分析等功能組合在
一個單一、完整的工具包中。
BoundsChecker
BoundsChecker是一個C++運行時錯誤檢測和調試工具。它通過在Visual?Studio內自動化調
試過程加速開發并且縮短上市的周期。BoundsChecker提供清楚,詳細的程序錯誤分析,許
多是對C++獨有的并且在static,stack和heap內存中檢測和診斷錯誤,以及發現內存和資
源的泄漏。
Insure++
參考站點:http://www.parasoft.com/
一個自動化的運行時程序測試工具,檢查難以察覺的錯誤,如內存覆蓋,內存泄漏,內存分
配錯誤,變量初始化錯誤,變量定義沖突,指針錯誤,庫錯誤,邏輯錯誤和算法錯誤等。
GlowCode
參考站點:http://www.glowcode.com/
?????????GlowCode包括內存泄漏檢查,code?profiler,函數調用跟蹤等功能。給C++開發
者提供完整的錯誤診斷,和運行時性能分析工具包。
Stack?Spy
參考站點:http://www.imperioustech.com/
它能捕捉stack?corruption,?stack?over?run,?stack?overflow等有關棧的錯誤。
引用:
http://nickylemongxr.blogchina.com/index.php?&pageno=2?引