問題的提出php
每過一段時間我總會收到一些程序員發來的電子郵件,他們會問我是用什麼編程語言來編寫本身的遊戲的,以及我是如何學習這種編程語言的。所以,我認爲在這篇博文裏列出一些有關C語言的最佳讀物應該能幫到很多人。若是你知道其它的優秀讀物,請給我發郵件或者直接在評論欄中告訴我吧。html
問題的解答(你能夠略過這部分)程序員
我在以前的一篇博文中已經提到過了,目前爲止,全部我所編寫的商業3D引擎95%都是C89(也稱做標準C,或ANSI C)。我之因此選擇C89而不是C99是由於有些編譯器仍然不能完美支持C99標準。並且從第一天起,我就強制規定遊戲須要能在iOS、Windows和Xbox 360平臺上都能編譯。根據我所選擇的編譯平臺,剩下5%的代碼是Objective-C(iOS)或者C++(Windows,Mac OS X),這是爲了將引擎綁定到原生的輸入/輸出設備上。沒想到的是,選擇C仍是C++這個主題在reddit曾上引起了很大的爭議。我選擇C的兩個真正緣由是:編程
● 我寫引擎時對C++掌握的並不算好。平臺資源很是有限(iPhone 2G),並且我知道我得對個人工具(編程語言)至關熟悉才能使遊戲達到每秒60幀的速度。數組
●由於我研讀過id Software(著名遊戲製做公司,Doom系列、Quake系列是其表明做,開創了FPS類型遊戲的先河)發佈過的源代碼,用純C完成一個商業遊戲是個人夢想。網絡
這算是「好」的選擇嗎?我想,到最後惟一合理的問題是:「你的遊戲發佈了嗎?」以及「它跑的夠快嗎?」看看那使人難以置信的幀速吧(有人提到在玩Shmup時會有眩暈的感受),我想我作了正確的選擇。iphone
糟糕的C讀物(不要忽略這一段)編程語言
我將以一些我認爲沒必要太認真的讀物提及:網絡教程,博客以及大部分Google上獲得的東西都算(沒錯,也包括我這篇)。一般我認爲這些資料來源是不可信的,並且有潛在的危害。和這一行裏大部分人同樣,我曾是重度Google搜索使用者。過了一段時間以後,我發現不許確的答案反而對生產力的提升有反效果。這讓我有了一種速度上的錯覺:答案找的越快,活幹的越慢。沒有什麼網站會比一本好書更有價值,沒有什麼好書比反彙編輸出更有價值。工具
優秀的C讀物學習
程序設計語言
1.《C程序設計語言》
《C程序設計語言》,又稱 K&R C。這是你應該首先去看的有關C語言編程的經典著做。讀這本書會很輕鬆,它只有272頁,386幅插圖。由C語言之父Kernighan和Ritchie親自編寫的短小且有清晰解釋的代碼示例遍及全書各個角落。在剛開始的幾周裏,全部你須要瞭解的有關C語言的知識都在這裏。這本書讀起來頗有趣,主題都比較短小,並且可使你很快上手。你可能會跳過附錄A(有關C語言中比較晦澀的陰暗角落,好比類型提高、 類型轉換、型別退化以及其它一些無用的東西)以及有關C標準庫的附錄B。我認爲剛開始學習C語言時,這些就足夠了。這本書使C顯得很嬌小、簡潔,所以強烈推薦學習這本書。
若是你繼續學習並堅持練習,很快你就會觸到一些詭異的狀況,好比下面的例子:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
在上面的代碼示例中,因爲整型提高的緣故,-1先被計算爲大於1,而後又小於1。C語言裏有不少這種陰暗面,此時將產生不正確的結果。
這裏還有許多細節之處:
1 2 3 4 5 6 |
|
或者有關數組/指針/類型退化的例子:
1 2 3 4 5 6 7 8 9 10 11 |
|
當你發現本身原來對C語言的瞭解還很不夠時(附錄A真的過輕量級了),那這時就是拿起第二本書的時候了。
2.《C專家編程》
這是本神奇的書,由於該書以一種很是娛樂化的方式告訴你在代碼背後究竟都發生了些什麼。經過介紹了幾個著名bug的奇聞異事(大部分跟NASA有關)後,讀者將再次領略整型提高、下標、類型退化以及許多其餘的C語言犄角。這本書是如此的迷人,你極可能會一夜埋頭讀完353頁,而後失望地說:怎麼這麼短?
如今你想挖的更深些併成爲一個優秀的C程序員,你應該拿起這本你所須要的最後一本C語言書籍:
3.《C語言參考手冊》
這本書全面涵蓋C/C89/C99標準。從今之後你面對的就是這些冰冷無聊的語言標準。你能夠把K&R 和C專家編程放在書架上,而把這本C語言參考手冊擺放在顯示器旁,任何你想知道的C語言知識都在這裏。
附加閱讀
只看書固然是不夠的。閱讀優秀的開源代碼將帶來極大的幫助。個人最愛是id Software的3D引擎代碼庫:Doom、Quake、Quake二、Quake三、Wolfenstein 3D iPhone以及Doom iPhone。當我閱讀這些代碼時,我會本身撰寫備忘日誌。以後我會整理這些日誌,寫成技術文章(Doom、Quake、Wolfenstein 3D iPhone 以及Doom iPhone)。
2. 《Sh*t My Dad Says》
試着保持健康的生活,改變一下,讀些有趣的東西吧 : )
注
原文評論欄中推薦的一些補充書目:
1. C Interfaces and Implementations: Techniques for Creating Reusable Software(C語言接口與實現:建立可重用軟件的技術)
2.Object-Oriented Programming With ANSI-C
3. 《Code Complete 2nd edition / 代碼大全 第二版》
關於譯(做)者:
陳舸:程序員,關注網絡協議、開源軟件、Linux、C/C++、Python。目前從事網絡通訊設備的開發。在看過《DOOM啓示錄》後,真正爲書中描述的程序員生活和黑客精神所震動。我沒法達到Carmark的水準,但能夠有和他同樣的分享精神。(新浪微博:@bigsh1p)
原文:http://www.kuqin.com/language/20120319/319131.html#source