C++資源之不完全導(dǎo)引 [上]
撰文/ 曾毅 陶文
最后更新:2004年6月11日
聲明:
.本文2004年5月首發(fā)于《CSDN開發(fā)高手》,版權(quán)歸該雜志與《程序員》雜志社所有。雜志限于篇幅部分內(nèi)容有所刪節(jié),此處版本為相對完整版本。
.本文為介紹性文章,會(huì)隨筆者學(xué)習(xí)C++語言不斷更新。
|
前言
無數(shù)次聽到“我要開始學(xué)習(xí)C++!”的吶喊,無數(shù)次聽到“C++太復(fù)雜了,我真的學(xué)不會(huì)”的無奈。Stan Lippman先生曾在《C++ Primer》一書中指出“C++是最為難學(xué)的高級程序設(shè)計(jì)語言之一”,人們常將“之一”去掉以表達(dá)自己對C++的敬畏。誠然,C++程序設(shè)計(jì)語言對于學(xué)習(xí)者的確有很多難以逾越的鴻溝,體系結(jié)構(gòu)的龐大,應(yīng)接不暇并不斷擴(kuò)充的特性……除此之外,參考資料之多與冗雜使它的學(xué)習(xí)者望而卻步,欲求深入者苦不堪言。希望這一份不完全導(dǎo)引能夠成為您C++學(xué)習(xí)之路上的引路燈。
撰寫本文的初衷并不打算帶領(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)為對于想學(xué)習(xí)C++的廣大讀者來說最重要并且觸手可及的開發(fā)與學(xué)習(xí)資源。
本文介紹并分析了一些編譯器,開發(fā)環(huán)境,庫,少量的書籍以及參考網(wǎng)站,并且盡可能嘗試著給出一個(gè)利用這些資源的導(dǎo)引,望對如同我們一樣的初學(xué)者能夠有所裨益。
編譯器
在C++之外的任何語言中,編譯器都從來沒有受到過如此之重視。因?yàn)?/span>C++是一門相當(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)來看,只有這樣的編譯器對C++開發(fā)人員來說才是最有意義的工具,尤其是對于程序設(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版本的編譯器中對標(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 Whidbey中帶的C++編譯器。由Microsoft公司研制。在Visual Studio 6.0中,因?yàn)榫幾g器有太多地方不能與后來出現(xiàn)的C++標(biāo)準(zhǔn)相吻合而飽受批評(想想你在使用STL的時(shí)候編譯時(shí)報(bào)出的那些令人厭惡的error和warning吧)。VC++6.0對標(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 Journal的評測顯示Visual C++7.1對標(biāo)準(zhǔn)C++的兼容性高達(dá)98.22%,一度成為CBX之前兼容性最好的編譯器。結(jié)合強(qiáng)大的Visual Studio.NET開發(fā)環(huán)境,是一個(gè)非常不錯(cuò)的選擇。至于Whidbey時(shí)代的Visual C++,似乎微軟所最關(guān)注的是C++/CLI……我們不想評論微軟下一代的C++編譯器對標(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++的編譯器有很多,比如:
GCC的一個(gè)Windows的移植版本(Dev-C++的后臺(tái))
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)容。
這是GCC的DOS移植版本。
這是GCC的DOS和Windows移植版本。
Intel C++
著名CPU制造廠商Intel出品的編譯器,Special Design for Intel x86!對于Intel x86結(jié)構(gòu)的CPU經(jīng)過特別的優(yōu)化。在有些應(yīng)用情況下,特別是數(shù)值計(jì)算等高性能應(yīng)用,僅僅采用Intel的編譯器編譯就能大幅度的提高性能。
Digital Mars C++
網(wǎng)絡(luò)上提供免費(fèi)下載,Zortech/Symantec C++的繼承者,其前身在當(dāng)年慘烈的C++四國戰(zhàn)中也是主角之一。
開發(fā)環(huán)境
開發(fā)環(huán)境對于程序員的作用不言而喻。選擇自己朝夕相處的環(huán)境也不是容易的事情,特別是在IDE如此豐富的情況下。下面就是我們推薦的一些常見的C++開發(fā)環(huán)境,并沒有包括一些小型的,罕見的IDE。其中任何一款都是功能豐富,可以用作日常開發(fā)使用的。對于不同層面的開發(fā)者,請參見內(nèi)文關(guān)于適用對象的描述。
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++編譯器。對于機(jī)器配置比較好的開發(fā)人員來說,使用這個(gè)開發(fā)環(huán)境將能滿足其大部分的要求。這里不打算單獨(dú)說Visual Studio Whidbey,雖然Visual Studio .NET 2005 - 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的中心位置,可能不利于對于C++語言的學(xué)習(xí)。而且其為了支持VCL這個(gè)Object Pascal寫的庫也對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,摒棄了以前令人無奈的版本。對于C++的開發(fā)來說,從編譯器,到庫,到功能集成都是非常理想的??梢灶A(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è)讓Windows下開發(fā)者流口水的編譯器。Dev-C++就是能夠讓GCC跑在Windows下的工具,作為集成開發(fā)環(huán)境,還提供了同專業(yè)IDE相媲美的語法高亮,代碼提示,調(diào)試等功能。由于使用Delphi開發(fā),占用內(nèi)存少,速度很快,比較適合輕量級的學(xué)習(xí)和使用。
Eclipse + CDT
Eclipse可是近來大名鼎鼎的開發(fā)工具。最新一期的Jolt大獎(jiǎng)就頒給了這個(gè)杰出的神物。說其神奇是因?yàn)椋旧硎怯?/span>Java寫的,但是擁有比一般Java寫的程序快得多的速度。而且因?yàn)槠浠诓寮M裝一切的原則,使得能夠有CDT這樣的插件把Eclipse變成一個(gè)C/C++的開發(fā)環(huán)境。如果你一直用Eclipse寫Java的程序,不妨用它體驗(yàn)一下C++開發(fā)的樂趣。
工具
C++的輔助工具繁多,我們分門別類的為大家作介紹:
文檔類
Doxygen
Doxygen是一種適合C風(fēng)格語言(如C++、C、IDL、Java甚至包括C#和PHP)的、開放源碼的、基于命令行的文檔產(chǎn)生器。
C++2HTML
把C++代碼變成語法高亮的HTML
CodeColorizer
它能把好幾種語言的源代碼著色為HTML
Doc-O-Matic
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
DocVizor滿足了面向?qū)ο筌浖_發(fā)者的基本要求——它讓我們能夠看到C++工程中的類層次結(jié)構(gòu)。DocVizor快速地產(chǎn)生完整可供打印的類層次結(jié)構(gòu)圖,包括從第三方庫中來的那些類,除此之外DocVizor還能從類信息中產(chǎn)生HTML文件。
SourcePublisher C++
參考站點(diǎn):http://www./sourcepublisher_c.html
給源代碼產(chǎn)生提供快速直觀的HTML報(bào)表,包括代碼,類層次結(jié)構(gòu),調(diào)用和被調(diào)用樹,包含和被包含樹。支持多種操作系統(tǒng)。
Understand
參考站點(diǎn):http://www./ucpp.html
分析任何規(guī)模的C或者C++工程,幫助我們更好的理解以及編寫文檔。
代碼類
CC-Rider
參考站點(diǎn):http://www.
CC-Rider是用于C/C++程序強(qiáng)大的代碼可視化工具,通過交互式瀏覽、編輯及自動(dòng)文件來促進(jìn)程序的維持和發(fā)展。
CodeInspect
參考站點(diǎn):http://www./
一種新的C/C++代碼分析工具。它檢查我們的源代碼找出非標(biāo)準(zhǔn)的,可能的,以及普通的錯(cuò)誤代碼。
CodeWizard
參考站點(diǎn):http://www.
先進(jìn)的C/C++源代碼分析工具,使用超過500個(gè)編碼規(guī)范自動(dòng)化地標(biāo)明危險(xiǎn)的,但是編譯器不能檢查到的代碼結(jié)構(gòu)。
C++ Validation Test Suites
一組用于測試編譯器和庫對于標(biāo)準(zhǔn)吻合程度的代碼庫。
CppRefactory
CPPRefactory是一個(gè)使得開發(fā)者能夠重構(gòu)他們的C++代碼的程序。目的是使得C++代碼的重構(gòu)能夠盡可能的有效率和簡單。
Lzz
Lzz是一個(gè)自動(dòng)化許多C++編程中的體力活的工具。它能夠節(jié)省我們許多事件并且使得編碼更加有樂趣。給出一系列的聲明,Lzz會(huì)給我們創(chuàng)建頭文件和源文件。
QA C++ Generation 2000
參考站點(diǎn):http://www./solutions/qacpp.htm
它關(guān)注面向?qū)ο蟮?/span>C++源代碼,對有關(guān)于設(shè)計(jì),效率,可靠性,可維護(hù)性的部分提出警告信息。
s-mail project - Java to C++DOL
參考站點(diǎn):http://sadlocha./s-mail/ja2dol.html
把Java源代碼翻譯為相應(yīng)的C++源代碼的命令行工具。
SNIP from Cleanscape Software International
參考站點(diǎn):http://www./stdprod/snip/index.html
一個(gè)填平編碼和設(shè)計(jì)之間溝壑的易于使用的C++開發(fā)工具,節(jié)省大量編輯和調(diào)試的事件,它還使得開發(fā)者能夠指定設(shè)計(jì)模式作為對象模型,自動(dòng)從對象模型中產(chǎn)生C++的類。
SourceStyler C++
參考站點(diǎn):http://www./
對C/C++源代碼提供完整的格式化和排版控制的工具。提供多于75個(gè)的格式化選項(xiàng)以及完全支持ANSI C++。
編譯類
Compilercache
Compilercache是一個(gè)對你的C和C++編譯器的封裝腳本。每次我們進(jìn)行編譯,封裝腳本,把編譯的結(jié)果放入緩存,一旦編譯相同的東西,結(jié)果將從緩存中取出而不是再次編譯。
Ccache
Ccache是一個(gè)編譯器緩存。它使用起來就像C/C++編譯器的緩存預(yù)處理器,編譯速度通常能提高普通編譯過程的5~10倍。
Cmm (C++ with MultiMethods)
這是一種C++語言的擴(kuò)展。讀入Cmm源代碼輸出C++的源代碼,功能是對C++語言添加了對multimethod的支持。
The Frost Project
Forst使得你能夠在C++程序中像原生的C++特性一樣使用multimethod以及虛函數(shù)參數(shù)。它是一個(gè)編譯器的外殼。
測試和調(diào)試類
CPPUnit
CppUnit 是個(gè)基于 LGPL 的開源項(xiàng)目,最初版本移植自 JUnit,是一個(gè)非常優(yōu)秀的開源測試框架。CppUnit 和 JUnit 一樣主要思想來源于極限編程。主要功能就是對單元測試進(jìn)行管理,并可進(jìn)行自動(dòng)化測試。
C++Test
C++ Test是一個(gè)單元測試工具,它自動(dòng)化了C和C++類,函數(shù)或者組件的測試。
Cantata++
參考站點(diǎn):http://www./products/tools/pt400.shtml
設(shè)計(jì)的目的是為了滿足在合理的經(jīng)濟(jì)開銷下使用這個(gè)工具可以讓開發(fā)工程師開展單元測試和集成測試的需求.
Purify
參考站點(diǎn):http://www-900.ibm.com/cn/software/rational/products/purifyplus/index.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ò)誤分析,許多是對C++獨(dú)有的并且在static,stack和heap內(nèi)存中檢測和診斷錯(cuò)誤,以及發(fā)現(xiàn)內(nèi)存和資源的泄漏。
Insure++
一個(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包括內(nèi)存泄漏檢查,code profiler,函數(shù)調(diào)用跟蹤等功能。給C++開發(fā)者提供完整的錯(cuò)誤診斷,和運(yùn)行時(shí)性能分析工具包。
Stack Spy
參考站點(diǎn):http://www./
它能捕捉stack corruption, stack over run, stack overflow等有關(guān)棧的錯(cuò)誤。
|