寫好C程式的10 大要點

2021-04-14 00:35:33 字數 3039 閱讀 1331

要寫好c語言程式,最重要的當然是把要解決的問題分析清楚,設計好解決問題的方案和通過計算實現求解的過程,對問題的求解過程進行科學的結構化的分解。在此基礎上進一步考慮如何寫程式的時候,下面的建議可能有所幫助。 

這些建議中有些是一般性的,不僅僅對c語言程式設計有效;也有些是特別針對c語言程式設計的。這個表還會進一步修改和擴充,歡迎提出意見。 

________________________________________ 

1)應該特別注意程式的書寫格式,讓它的形式反映出其內在的意義結構。 

程式是最複雜的東西(雖然你開始寫的程式很簡單,但它們會逐漸變得複雜起來),是需要用智力去把握的智力產品。良好的格式能使程式結構一目了然,幫助你和別人理解它,幫助你的思維,也幫助你發現程式中不正常的地方,使程式中的錯誤更容易被發現。 

人們常用的格式形式是:邏輯上屬於同乙個層次的互相對齊;邏輯上屬於內部層次的推到下乙個對齊位置。請參考本課程的教科書或《c程式語言》(the c programming language,brian w. kernighan & dennis m. rirchie,清華大學出版社,大學計算機教育叢書(影印版,英文),1996。) 

利用整合開發環境(ide)或者其他程式編輯器的功能,可以很方便地維護好程式的良好格式。請注意下面這幾個鍵,在寫程式中應該經常用到它們:enter鍵(換一行),tab鍵(將輸入游標移到下乙個對齊位置——進入新的乙個層次),backspace鍵(回到前乙個對齊位置——退到外面的乙個層次)。 

________________________________________ 

2)用最規範的、最清晰的、最容易理解的方式寫程式。注意人們在用c語言寫程式的習慣寫法,例如教科書中解決類似問題時所使用的寫法,《c程式語言》一書中有許多極好的程式例項。在這裡有乙個關於程式模式的相關網頁,裡面也列出了一些常用的模式。 

c語言是乙個非常靈活的語言,你可能在這裡用許多非常隱晦的方式寫程式,但這樣寫出的程式只能是作為一種玩意兒,就像謎語或者智力遊戲。這些東西可以用於消磨時間,但通常與實際無緣。在我們的c語言討論組裡提到過這種東西。 

________________________________________ 

3)在程式設計中,應仔細研究編譯程式給出的錯誤資訊和警告資訊,弄清楚每條資訊的確切根源並予以解決。特別是,不要忽略那些警告資訊,許多警告資訊源自隱含的嚴重錯誤。我們有許多辦法去欺騙編譯程式,使它不能發現我們程式中的錯誤,但這樣做最終受到傷害的只能是自己。 

________________________________________ 

4)隨時注意表示式計算過程和型別。注意運算子的優先順序和結合順序,不同型別的運算物件將怎樣轉換,運算的結果是什麼型別的,等等。在必要的時候加上括號或顯式的型別強制轉換。 

c語言的運算子很多,優先順序定義也不盡合理,很難完全記清楚,因此要特別注意。需要時查一查(不要怕麻煩,相關網頁有運算子表),或者直接按照自己的需要加上幾個括號。 

________________________________________ 

5)絕不去寫依賴於運算物件求值順序的表示式。對於普通二元運算子的運算物件,函式呼叫的各個實際引數,c語言都沒有規定特定求值順序。因此,我們不應該寫那種依賴於特定求值順序的表示式,因為不能保證它一定得到什麼結果。例如下面的表示式和函式呼叫都是不合適的,很可能產生你預料不到的結果: 

scanf("%d %d", i++, a[i]); 

m = n * n++; 

________________________________________ 

6)總保證乙個函式的定義點和它的所有使用點都能看到同乙個完整的函式原型說明。參看《從問題到程式》第103-107頁。 

________________________________________ 

7)總注意檢查陣列的界限和字串(也以陣列的方式存放)的結束。c語言內部根本不檢查陣列下標表示式的取值是否在合法範圍內,也不檢查指向陣列元素的指標是不是移出了陣列的合法區域。寫程式的人需要自己保證對陣列使用的合法性。越界訪問可能造成災難性的後果。 

例:在寫處理陣列的函式時一般應該有乙個範圍引數;處理字串時總檢查是否遇到空字元'/0'。 

________________________________________ 

8)絕不對空指標或者懸空的指標做間接訪問。這種訪問的後果不可預料,可能造成系統的破壞,也可能造成作業系統發現這個程式執行非法操作而強制將它終止。 

________________________________________ 

9)對於所有通過返回值報告運**況或者出錯資訊的庫函式,都應該檢查其執行是否正常完成。如果庫函式沒有完成操作(可能因為各種原因),隨後的操作有可能就是非法的。這種錯誤也可能在程式執行中隱藏很長時間,到很後來才暴露出來,檢查錯誤非常困難。 

________________________________________ 

10)在帶引數巨集的定義字串中,一般應該給整個字串和其中出現的每個引數都加括號。 

c語言預處理程式是個簡單的文字替換程式,它根本不知道c語言的語法結構、優先順序規則等。不寫括號有時會產生我們不希望的代換結果。 

________________________________________ 

11)所有外部變數名字、所有函式名字,應該只靠前6個字元就能夠互相區分。因為有些老的編譯程式只關注這些名字的前6個字元。如果不注意這個問題,就可能引起隱含的連線錯誤。 

________________________________________ 

有關如何寫好程式,如何將自己發展成為乙個高水平的計算機工作者(真正的高階程式工作者,而不是那種拿證書的所謂「高階程式設計師」)還需要進一步學習和實踐。如果希望向這個方向努力,我翻譯的一本書可能對你有所幫助: 

《程式設計實踐》,(the practice of programming, brian w. kernighan & bob pike 1999)。機械工業出版社2000。這本書討論了程式設計的許多重要的實踐性問題,值得每個學過乙個程式語言,有些程式設計經驗,熱愛或夢想在計算機領域工作的人閱讀參考。在這裡可以看到原書的前言和章節表。還有我為該書中文版寫的譯者序言。  

寫好C程式的10 大要點

寫好c程式的10 大要點 要寫好c語言程式,最重要的當然是把要解決的問題分析清楚,設計好解決問題的方案和通過計算實現求解的過程,對問題的求解過程進行科學的結構化的分解。在此基礎上進一步考慮如何寫程式的時候,下面的建議可能有所幫助。這些建議中有些是一般性的,不僅僅對c語言程式設計有效 也有些是特別針對...

oralce優化之10大要點九十

九 sql優化 1 優化器模式 oracle9i有兩種優化器模式可以選擇 rule based uses a ranking system syntax and data dictionary driven cost based chooses least cost path statistics ...

做好eCosway的三大要點

如果不是這樣作,你一定賺不到高收入!做好 ecosway 的三大要點 我們團隊發展速度非常快,也就是公司贈送的 ev佔了 80 重複消費大概是 20 是個不錯的比例,而在馬來西亞與台灣,開設很多店鋪的地區,贈送業績與消費業績各佔一半,相信中國開店後,消費業績應該能佔 50 以上的!團隊發展快速,領導...