@Benjamin
顯然VS2010要花個大半天安裝,附上一大堆不想要的東西才能使用命令行
這個是個綠色精簡版啊
@OwnWaterloo
這是4月份的vs2010正式版里面提取出來的,上一個是去年的beta版vs2010里面提取的
@勿蘊
我測試過了,把
binutils-2.18.50-20080109-2
mingw-runtime-3.14
w32api-3.11
mingw32-make-3.81-20080326-2
解壓出來
合并到gcc的目錄里面就可以了,而如果你沒有合并,尤其是沒有合并mingw runtime,那么編譯的時候要刷屏的
約瑟夫問題(猴子選大王)有數(shù)學公式的,見Knuth的《具體數(shù)學》
re: c++晦澀語法背后的故事(一)[未登錄] romangol 2007-11-14 00:43
@pzy
下面是對應函數(shù)調(diào)用的反匯編代碼中重要的幾行
int i = p->doIt(3);
0040133B MOV DWORD PTR SS:[ESP+8],0A ;壓入默認參數(shù)10
00401343 MOV DWORD PTR SS:[ESP+4],3 ;壓入調(diào)用參數(shù)3
0040134E MOV DWORD PTR SS:[ESP],EAX
00401351 MOV EAX,DWORD PTR DS:[EDX]
00401353 CALL EAX
int j = q->doIt(3);
00401389 MOV DWORD PTR SS:[ESP+8],14 ;壓入默認參數(shù)20
00401391 MOV DWORD PTR SS:[ESP+4],3 ;壓入調(diào)用參數(shù)3
00401399 MOV EAX,DWORD PTR SS:[EBP-10]
0040139C MOV DWORD PTR SS:[ESP],EAX
0040139F MOV EAX,DWORD PTR DS:[EDX]
004013A1 CALL EAX
注意到兩個默認參數(shù)是在編譯時就已經(jīng)寫死了,也就是說編譯器在編譯器就為兩個doIt調(diào)用分別決議了默認參數(shù),然而在運行期它們卻是通過動態(tài)的方式
Call EAX
來運行,實際上在調(diào)試中也可以看到它們調(diào)用的都是子類的doIt函數(shù)(調(diào)用地址是相同的)。
我個人的理解是,虛函數(shù)的調(diào)用是通過虛函數(shù)表來完成的,故父類指針可以調(diào)用子類的函數(shù),然而默認參數(shù)作為對象內(nèi)存模型的一部分,是分別屬于不同的對象的,故編譯器為父類指針的函數(shù)調(diào)用還是賦予了父類對象的參數(shù)值。
請高手們指教
re: 謝謝RomanGol RomanGol 2006-01-02 02:39
謝謝哦,其實我認為學習C語言入門,還是要讀好的風格的書。這樣將來就免去很多犯錯誤的可能
另外推薦關(guān)于C++的入門書籍兩本:
Essential C++
Accelerate C++
非常適合初學者
祝您新年快樂
re: 有關(guān)C語言的學習書目 RomanGol 2005-12-15 15:07
個人愚見,譚浩強的書并不是很好,至少從代碼風格和使用不等寬字體排版上來說。轉(zhuǎn)載一篇文章:
C程序設(shè)計之四書五經(jīng)
引言
自從Dennis M.Ritchie于1973年設(shè)計并實現(xiàn)C語言以來,計算機程序設(shè)計領(lǐng)域已經(jīng)發(fā)生了巨大的變化。以C語言為根基的C++、Java和C#等面向?qū)ο笳Z言相繼誕生,并在各自領(lǐng)域大獲成功。今天,C及其后裔幾乎統(tǒng)治了計算機程序設(shè)計世界??梢赃@么說,C語言的誕生是現(xiàn)代程序語言革命的起點,它改變了程序設(shè)計語言發(fā)展的軌跡,是程序設(shè)計語言發(fā)展史中的一個里程碑。
然而,C并不僅僅是其他語言的起點和基礎(chǔ),否則它早已成為程序設(shè)計語言發(fā)展過程中又一個被遺棄者。和當初發(fā)明時一樣,C語言今天依然至關(guān)重要。它的表達力、效率、簡練、緊湊、對機器的最終控制以及跨平臺的高度移植性,使其在系統(tǒng)編程、嵌入式編程等領(lǐng)域一直占據(jù)著統(tǒng)治地位,而C99標準的制訂則再一次使C語言煥發(fā)出新的活力。下文介紹C程序設(shè)計領(lǐng)域中的幾本好書,其中一些堪稱經(jīng)典。
1. Brian W.Kernighan, Dennis M.Ritchie,《C程序設(shè)計語言》,機械工業(yè)出版社
這是迄今為止在所有程序設(shè)計語言書籍中最廣受尊敬的一部經(jīng)典,是任何一名C程序員的必讀之作。因為出自C語言的設(shè)計者Dennis M.Ritchie和著名的計算機科學家Brian W.Kernighan之手,它被昵稱為“K&R C”。是它首先引入了“Hello World!”程序,這個程序幾乎成了后來任何一本入門性程序設(shè)計語言書籍中的第一個例子。
如同C語言本身簡潔緊湊而極具威力一樣,這本書輕薄短小而極富張力。通過簡潔的描述和典型的示例,它全面、系統(tǒng)、準確地講述了C語言的各個特性以及C程序設(shè)計的基本方法,內(nèi)容涵蓋基本概念、類型和表達式、控制流、函數(shù)與程序結(jié)構(gòu)、指針與數(shù)組、結(jié)構(gòu)、輸入與輸出、UNIX系統(tǒng)接口以及標準庫等內(nèi)容。
簡潔清晰是這本書最大的特色。這本小書可以教給你許多比它厚幾倍的“大部頭”的知識。我認為那些動輒洋洋灑灑拼湊出好幾百頁乃至上千頁的技術(shù)作者應該好好向K&R學一學。對于中、高級程序員而言,如果希望迅速獲得C語言的嚴肅知識而又不愿意多花費哪怕一丁點時間,這本書就是首選。
順便說一句,這本書的索引制作非常出色,極具實用價值,這可能首先要歸功于正文部分的簡明扼要。此外,盡管它看上去很像一本教程,但其實更是一本寫給專業(yè)程序員的指南。如果你不具備任何其他語言程序設(shè)計背景或基本的C語言知識,這本書也許并不適合用作你的C語言啟蒙讀物。
2. Perter Van Der LinDen,《C專家編程》,人民郵電出版社
C語言是嚴肅的程序員語言,但這并不意味著C語言書籍必須板著面孔說教。在這本被C程序員昵稱為“魚書”(封面上有一條“丑陋的”腔棘魚)的著作中,作為SUN公司編譯器和操作系統(tǒng)核心開發(fā)組成員之一,Peter淋漓盡致地展示了其深厚的技術(shù)沉淀、豐富的項目經(jīng)驗、高超的寫作技巧以及招牌式的幽默。在這部作品中,作者以流暢的文字、詼諧的筆法將逸聞典故、智慧和幽默自然地融入技術(shù)描述中,讀來宛若一本小說,極富趣味。
本書講述了C語言的歷史、語言特性、聲明、數(shù)組、指針、連接、運行時以及內(nèi)存使用等知識,揭示了C語言中許多隱晦之處,尤其深入解析了聲明、數(shù)組和指針、內(nèi)存使用等方面的細節(jié)。要想成為一名專家級C程序員,這些內(nèi)容都是必須掌握的。和其他滿是抽象例子的C語言書籍不同,這本書充滿了大量的來自真實世界的C程序設(shè)計實例,它們對C程序員具有很高的參照價值。另外,每一章都以極富趣味的“輕松一下”收尾,而附錄A“程序員工作面試的秘密”則是任何語言的程序員在應聘工作前增強自信的好材料。
我懷疑真正的C專家可能用不著看這本書 - 從內(nèi)容到組織方式到行文風格都決定了這是一本輕松愉快的“從菜鳥到高手”的進階讀本,所以,它理應擁有更廣泛的讀者群。初級程序員往往更需要熱情的鼓勵,在閱讀這本書的過程中,你定會深深地被作者對編程的激情所感染。
世間并無完美。我認為這本書的缺陷在于,和大多數(shù)平庸的C語言書籍一樣,它畫蛇添足地加入了一章關(guān)于C++的描述。在今天看來,這個描述既不全面也有失公允。不過,鑒于作者是在1994年從一名C程序員的角度去觀察C++,這一點也就不足為奇了。
3. Samuel P. Harbison, Guy L. Steele,《C語言參考手冊(第五版)》(影印版),人民郵電出版社
在C語言參考手冊類書籍里,Samuel P. Harbison 和Guy L. Steele合著的《C: A Reference Manual》是非常出色的一本。這本手冊的第五版新增了對C99標準的介紹,以便滿足新時期C語言學習的需要。全書共分為兩大部分,第一部分專注于C語言特性,第二部分則全面討論了C標準庫。本書涵蓋C99、C89、傳統(tǒng)的C、所有版本的C運行庫以及編寫與C++兼容的C代碼等一切知識。
這本手冊只是中等厚度,但它比“比它更厚”的其他參考手冊更清晰地描述了C語言的現(xiàn)在和過去的方方面面。整本手冊技術(shù)細節(jié)描述精確,組織條理清楚,內(nèi)容完備詳盡而又簡明扼要??梢赃@么說,它在廣度、深度和精度方面都是出類拔萃的。對于中、高級C程序員而言,這本手冊值得常備案頭,它幾乎肯定要比K&R的著作使用頻率更高。
2004年2月1日補充:我手頭有這本書的中文版:《C語言參考手冊》(機械工業(yè)出版社出版)。它在很大程度上減輕了我的查閱負擔,不過偶爾也增加了理解上的困難。
4. David Hanson,《C語言接口與實現(xiàn):創(chuàng)建可重用軟件的技術(shù)》,機械工業(yè)出版社
C語言能夠歷經(jīng)三十多年而不衰,一個重要的原因在于它的適應能力。在這“復用”、“面向?qū)ο蟆薄ⅰ敖M件”、“異常處理”等先進機制漫天飛舞的年代,C語言仍然能夠憑借它小而優(yōu)雅的語言特性,在相當程度上滿足現(xiàn)代軟件體系架構(gòu)提出的要求。只不過,想要達到這個程度,必須要在C的應用功力上達到最高層次。在嵌入式、系統(tǒng)軟件以及對性能要求極高的系統(tǒng)開發(fā)中,開發(fā)人員必須達到這樣的層次,熟練掌握C語言的高級特性,才能夠同時滿足效率和靈活性、復用性的要求??上?,雖然C語言技術(shù)圖書汗牛充棟,但是關(guān)注這個峰頂之域的作品卻是屈指可數(shù)。David Hanson的《C Interfaces and Implementations》就是個中翹楚。
David Hanson是業(yè)內(nèi)大名鼎鼎的自由編譯器lcc的合作者。在這個項目中,他負責提供高度可復用的基礎(chǔ)架構(gòu)。在不斷的實踐中,他完全使用ANSI C形成了一整套可復用組件庫。這套組件庫架構(gòu)清晰,性能優(yōu)異,而且提供了很多高級的特性,比如類Win32 SEH的異常處理機制,可移植的線程庫,高性能的內(nèi)存池,豐富的可復用數(shù)據(jù)結(jié)構(gòu)組件。David Hanson把他在創(chuàng)作這些組件的過程中所積累的心得以及對其源碼的精致剖析原原本本地寫在了這本書里。這樣的著作,當然堪稱C語言領(lǐng)域里的銘心絕品。難怪已故著名技術(shù)作家Richard Stevens對此書贊不絕口,他說:“這本書中的技術(shù),對于大部分C程序員來說,已經(jīng)遺忘得太久了?!睂τ谙M茉贑語言應用上達到最高層次的核心程序員而言,這本書是難得的必讀之作。
其他
除了以上四本書以外,我還樂意推薦Andrew Koenig的著作《C陷阱和缺陷》(人民郵電出版社)和Deitel父子合著的《C How to Program》兩本書。
Andrew Koenig是世界上屈指可數(shù)的C++專家,他的這本書可能是最薄的一本C語言經(jīng)典。它簡明扼要地講述了C程序設(shè)計中的陷阱和缺陷,包括詞法陷阱、語法陷阱、語義陷阱、連接、庫函數(shù)、預處理器以及可移植性缺陷等,最后一章還給出了關(guān)于如何減少程序錯誤的建議以及前面各章問題的參考答案。盡管這個小冊子成書于C89標準制定之前,然而,即使到了C99早已頒布的今天,書中提到的大多數(shù)陷阱和缺陷一如十五年前那樣使我們警醒。
Deitel父子合著的《C How to Program》一直是非常好的C語言入門教程,我手頭的中譯本名為《C程序設(shè)計教程》(機械工業(yè)出版社出版,原書第二版)。除了對技術(shù)的正規(guī)描述(輔以許多簡明扼要的例子)外,每一章后面都帶有小結(jié)、術(shù)語、常見的程序設(shè)計錯誤、良好的程序設(shè)計習慣、性能忠告、可移植性忠告、軟件工程評述、自我測驗練習及答案等。整書內(nèi)容清晰,組織良好,易于閱讀和理解。值得一提的是,有許多入門書讀完一遍即可扔掉,而這一本是個例外。