轉載時請注明出處和作者聯系方式
文章出處:http://www.limodev.cn/blog
作者聯系方式:李先靜 <xianjimli at hotmail dot com>
需求簡述
用C語言編寫一個雙向鏈表。如果你有一定的C語言編程經驗,這自然是小菜一碟。有的讀者可能連一個小程序都沒有寫過,那也不用害怕,可以參考任何一本《數據結構》和C語言的書籍。先弄明白基本概念,把書上的代碼看明白,再把代碼抄到電腦里,保證編譯過去,調試它到正常運行。反復這個過程,直到你能獨立完成它為止。寫第一行代碼是很痛苦的,我培訓過好幾個同事,他們不是計算機系畢業的,開始在電腦前坐一整天,一行代碼都敲不出來,我最早寫程序時的情況也好不了多少,不過沒有關系,邁出這一步就好了。
花1-3天時間,完成這個任務后,再繼續往下閱讀。轉載時請注明出處和作者聯系方式
文章出處:http://www.limodev.cn/blog
作者聯系方式:李先靜 <xianjimli at hotmail dot com>
當你讀到這里的時候,相信你已經獨立寫出了一個雙向鏈表。恭喜你!邁出這一步可是值得慶祝的,現在你已經走在通往程序員的光明大道上了。不過你還是個業余程序員,那當然了,你才寫出第一個程序呢!什么時候才能成為一個專業程序員呢?三年還是五年工作經驗?其實不用的,你馬上就可以了,我沒有騙你,因為專業程序員與業余程序員之分主要在于一種態度,如果缺乏這種態度,擁有十年工作經驗也還是業余的。
什么態度?專業態度!也就是星爺常說的專業精神。專業態度有多種表現形式,以后我們會一一介紹的。這里先介紹一下有關形象的態度,專業的程序員是很注重自己的形象的,當然程序員的形象不是表現在衣著和言談上,而是表現在代碼風格上,代碼就是程序員的社交工具,代碼風格可是攸關形象的大事。
有人說過,傻瓜都可以寫出機器能讀懂的代碼,但只有專業程序員才能寫出人能讀懂的代碼。作為專業程序員,每當寫下一行代碼時,要記得程序首先是給人讀的,其次才是給機器讀的。你要從一個業余程序員轉向專業程序員,就要先從代碼風格開始,并從此養成一種嚴謹的工作態度,生活上的不拘小節可不能帶到編程中來。
代碼風格有很多種,Windows 和Linux都有自己主流的代碼風格,每個團隊,每個公司也可能有自己的代碼風格,爭論哪種風格好那種風格壞沒有什么意義。只要有助于其他程序員理解的代碼風格都是可以接受的,因為遵循特定代碼風格的目的就是為了便于交流。
這里介紹一下作者本人喜歡的代碼風格,這種代碼風格也在作者所在團隊中使用。這里的命名風格與GTK+代碼相近,排版風格Linux內核代碼相近。
命名要展示對象的功能。
文件名:單詞小寫,多個單詞用下劃線分隔。
如: dlist.c (這里d代表double,是通用的縮寫方法)
注意:文件名一定要能傳達文件的內容信息,別人一看到文件名就是知道文件中放的是什么內容。只把一個類或者一類的代碼放在一起是好的習慣,這樣就很容易給文件取一個直觀的名字。業余愛好者常常把很多沒關系的代碼糅到一個文件中,結果造成代碼雜亂無章,也很難給它取一個恰當的名字。
函數名:單詞小寫,多個單詞用下劃線分隔。
如:find_node
注意:同樣,一個函數只完成單一功能,不要用代碼的長度來衡量是不是要把一段代碼獨立成一個函數。即使只有幾行代碼,只要它完成的是一項獨立的功能,都應該提為一個單獨的函數,而函數名可以直觀的反應出它的功能。如果在給函數起名時遇到了困難,通常是函數設計不合理,應該仔細思考一下。
結構/枚舉/聯合名:首字母大寫,多個單詞連寫。
如:struct _DListNode;
宏名:單詞大寫,多個單詞下劃線分隔
如:#define MAX_PATH 260
變量名:單詞小寫,多個單詞下劃線分隔。
如:DListNode* node = NULL;
面向對象的命名方式:
1.以對象為中心,采用主語(對象)+謂語(動作),取代傳統的謂語(動作)+賓語(目標)。
如:dlist_append
2.第一個參數為對象,并用thiz命名。
如:dlist_append(DList* thiz, void* value);
3.對象有自己的生命周期,都有create和destroy函數。
排版布局要美觀大方。
合理使用空行:
1.函數體之間用空行分隔。
2.結構/聯合/枚舉聲明空行分隔。
3.不同功能的代碼塊之間用空行分隔。
4.類似的代碼放在一起,和其它部分用空行分隔。比如宏定義,類型定義,函數聲明和全局變量放在一起。
5.使用空行時,一行就夠了,不要使用連續多個空行,那樣讓人感覺空蕩蕩。
合理使用空格:
1.等號兩邊用空格。如:
如:int a = 100;
2.參數之間用空格。如:
如:test(int a, int b, int c)
3.語句末的分號與前面內容不要加空格。
如:test(a, b, c);
4.其它有助讓代碼更美觀的地方。
合理使用括號:
1.用括號分隔子表達式,不要只靠默認優先級來判斷。
如:((a && b) || (c && d))
2.用括號分隔if/while/for等語句的代碼塊,那怕代碼只有一行。
如:
if(a > b)
{return c;
}
合理的縮進方式:
每一級都正常縮進,用tab縮進取代空格縮進(Linuxkernel也遵循此規則)。用空格縮進的目的是防止代碼因編輯器的tab寬度不同而變亂,這個擔心現在是多余的了,代碼編輯器都支持tab寬度設置了。如果縮進的居次太多(比如超過三層),可能是代碼設計上出了問題。
如:
if(a > b)
{for(i = 0; i < 100; i++){…}
}
遵從團隊的習慣。這個是最重要的,一個團隊就要像一個團隊的樣子,不管你的水平有多高,遵循團隊的規則是一個程序員的基本素養。如果團隊的規則確實不好,大家應該一起完善它。
做到這一點,你已經走近專業程序員了,重新做一遍練習吧。隨著后面的學習,你就可以真正走進專業程序員這個行列了。