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