如何成為一名優秀的C程式設計師

2021-09-01 04:28:12 字數 4109 閱讀 8319

標籤: 

程式設計師class

blank

become

target  分類:

c/c++程式設計

如何成為一名優秀的c程式設計師

全屏閱讀

[收藏]

英文原文:to become a good c programmer

問題的提出

問題的解答(你可以略過這部分)

我在之前的一篇博文中 已經提到過了,目前為止,所有我所編寫的商業 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 時會有眩暈的感覺),我想我做了正確的選擇。

糟糕的c讀物(不要忽略這一段)

我將以一些我認為不必太認真的讀物說起:網路教程,部落格以及大部分 google 上得到的東西都算(沒錯,也包括我這篇)。通常我認為這些資料**是不可信的,而且有潛在的危害。和這一行裡大部分人一樣,我曾是重度 google 搜尋使用者。過了一段時間之後,我發現不準確的答案反而對生產力的提高有反效果。這讓我有了一種速度上的錯覺:答案找的越快,活幹的越慢。沒有什麼**會 比一本好書更有價值,沒有什麼好書比反彙編輸出更有價值。

優秀的c讀物

1. 《c程式語言》

《c程式語言》("c programming language", 又稱 k&r)。這是你應該首先去看的有關c語言程式設計的經典著作。讀這本書會很輕鬆,它只有 272 頁,386幅插圖。由c語言之父 kernighan 和 ritchie 親自編寫的短小且有清晰解釋的**示例遍布全書各個角落。在剛開始的幾周裡,所有你需要了解的有關c語言的知識都在這裡。這本書讀起來很有趣,主題都比較 短小,而且可以使你很快上手。你可能會跳過附錄a(有關c語言中比較晦澀的陰暗角落,比如型別提公升、 型別轉換、型別退化以及其它一些無用的東西)以及有關c標準庫的附錄b。我認為剛開始學習c語言時,這些就足夠了。這本書使c顯得很嬌小、簡潔,因此強烈 推薦學習這本書。

如果你繼續學習並堅持練習,很快你就會觸到一些詭異的情況,比如下面的例子:

unsigned

int ui_one =

1;signed

int i_one =

1;signed

short s_minus_one = -

1;if (s_minus_one > ui_one)

printf (「-

1 >

1 \n」);

if (s_minus_one < i_one)

printf (「-

1<

1 \n」);

#./run

## -

1 >

1# - 1

<

1在上面的**示例中,由於整型提公升的緣故,-1先被計算為大於1,然後又小於1。c語言裡有很多這種陰暗面,此時將產生不正確的結果。

這裡還有許多細節之處:

extern

void foo (

void);

void (*f)();

f = &foo;

//合法f = foo;

//同樣合法!(語法糖)

f ();

//呼叫f(*f)();

//同樣呼叫了f(語法糖)

或者有關陣列/指標/型別退化的例子:

int array = ;

int *pointer = array;

if (

sizeof array ==

sizeof pointer)

printf (「this will never be printed!!」);

if (

sizeof(

int *) ==

sizeof &array[

0])printf (「this will be printed!!\n」);

if (&array[

2] - &array[

0] ==

8 )printf (「this will never be printed either, result

is2 not

8!!」);

當你發現自己原來對c語言的了解還很不夠時(附錄a真的太輕量級了),那這時就是拿起第二本書的時候了。

2.  《c專家程式設計》(expert c programming)

這是本神奇的書,因為該書以一種非常娛樂化的方式告訴你在**背後究竟都發生了些什麼。通過介紹了幾個著名 bug 的奇聞異事(大部分跟 nasa 有關)後,讀者將再次領略整型提公升、下標、型別退化以及許多其他的c語言犄角。這本書是如此的迷人,你很可能會一晚上埋頭讀完 353 頁,然後失望地說:怎麼這麼短?

現在你想挖的更深些並成為乙個優秀的c程式設計師,你應該拿起這本你所需要的最後一本c語言書籍:

3.  《c語言參考手冊》(c: a reference manual)

這本書全面涵蓋c/c89/c99標準。從今以後你面對的就是這些冰冷無聊的語言標準。你可以把《k&r》和《c專家程式設計》放在書架上,而把這本c語言參考手冊擺放在顯示器旁,任何你想知道的c語言知識都在這裡。

1.  id software **庫

只看書當然是不夠的。閱讀優秀的開源**將帶來極大的幫助。我的最愛是 id software 的 3d 引擎**庫:doom、quake、quake2、quake3、wolfenstein 3d iphone 以及 doom iphone。當我閱讀這些**時,我會自己撰寫備忘日誌。之後我會整理這些日誌,寫成技術文章(doom、 quake、wolfenstein 3d iphone 以及 doom iphone)。

試著保持健康的生活,改變一下,讀些有趣的東西吧 : )

1. c inte***ces and implementations: techniques for creating reusable software(c語言介面與實現:建立可重用軟體的技術)

3. 《 code complete 2nd edition / **大全 第二版》

部落格推薦文章

如何成為一名優秀的程式設計師

1.在實踐中成長,磨礪技術 2.不怕失敗,學會尋找成就感 新程式設計師由於技術水平 經驗的欠缺,寫出的程式bug多,執行效率低,可能被同事嘲笑 我發現這還是普遍現象 然後被上司責怪,內心充滿有挫折感。要學會自我減壓,相信挫折與失敗只是暫時的,發奮圖強。在工作中要學會尋找成就感,哪怕你只是完成乙個小功...

如何從一名普通的程式設計師高階成為一名優秀的程式設計師

本文將講述8種方式幫助你如何從一名普通的程式設計師高階成為一名優秀的程式設計師,讓我們就從此時此刻開始提高自己的開發技能吧。是時候開始認真考慮一下如何公升級你的開發技術了。讓我們來認真地學習一下吧。給自己設定乙個提高開發技術的目標很容易,但是 想成為一名偉大的程式設計師 卻不是乙個容易實現的目標。首...

10個習慣助你成為一名優秀的程式設計師

當談到程式設計時,很多人應該都有聽過 10x 程式設計師的說法。據說乙個 10x 程式設計師的效率大約是其他程式設計師的 10 倍。這是乙個有爭議的話題,無論你選擇相信 10x 程式設計師,還是認為這十分可笑,下面的 10 個習慣可以在一定程度上助你成為一名勢不可擋的優秀程式設計師。1 積極使用搜尋...