小甲魚python - 魚c工作室




學習C程序設計的資源 (5)

來自OO背景(C#/ java)我正在尋找資源來學習如何很好地設計純C程序。

雖然我熟悉C的語法,並且我可以編寫小程序,但我不確定採用更大應用程序的方法,以及採用何種技術。 你們可以推薦的任何東西。

編輯:我很高興完全放棄OO用於C語言編程,我的興趣是學習如何在沒有OO的情況下構建程序,我想學習用程序語言設計程序的好方法。


minin by tanenbaum


這篇文章有一個unix書籍列表,其中包括大多數經典的C / Unix作品。 對於Windows上的C編程,Petzold的Programming Windows可能是最好的開始。

對於C程序設計,一些unix編程書會告訴你片段,但我不知道“C程序架構”一書。

如果你已經習慣了java,那麼C編程的一些技巧是:

  1. use stack 。 通常在調用過程時,您需要在調用者的堆棧幀中分配變量,並將指針傳遞給您要調用的過程。 這將比使用malloc()動態分配內存快得多,而且更不容易出錯。 在適當的地方這樣做。

  2. C不進行垃圾收集,因此動態分配數據項更加繁瑣,你必須跟踪它們以確保它們被釋放。 在堆棧上分配的變量(見1)更適用於“慣用”。 另外,你不必釋放它們 - 這是局部變量的獎勵。

  3. (2)的Apropos,考慮一個體系結構,其中您的函數返回狀態或錯誤代碼,並使用堆棧按照(1)傳入和傳出數據。

  4. 了解setjmp()setjmp()作用。 它們對於通用錯誤處理程序機制非常有用,而不是結構化異常處理功能。

  5. C不支持例外。 見(3)。

  6. Lint是你的朋友。 Splint更加友好。

  7. 了解preprocessor功能以及即使可以,也不應該使用它。

  8. 了解endian-ness單詞對齊指針算術和其他低級建築奧秘的細節。 與流行觀點相反,這些不是火箭科學。 如果你感覺很敏銳,可以嘗試使用彙編語言,並掌握相關知識。 它將幫助您了解C程序中正在發生的事情。

  9. C沒有模塊範圍的概念,因此請計劃使用包含,原型聲明以及使用externstatic來創建私有範圍和導入標識符。

  10. C語言中的GUI編程在all platforms.all繁瑣platforms.

  11. (10)的Apropos學習至少一種腳本語言的C API,例如TclLuaPython. 在許多情況下,C的最佳用途是作為應用程序上的核心高性能引擎,該應用程序基本上是用其他東西編寫的。

  12. 構造函數的等價物是初始化函數,您可以在其中傳入指向要設置的項目的指針。 通常你可以通過調用看起來像setup_foo(&my_foo)的函數的形式看到這一點。 最好將分配與初始化分開,因為您可以使用此函數初始化已在堆棧上分配的項目。 類似的原則適用於析構函數。

  13. 大多數人發現匈牙利語符號匈牙利語一樣可讀。 例外的是匈牙利語母語人士,他們通常會發現匈牙利語符號與Cuneiform.一樣易讀Cuneiform. 。 不幸的是,匈牙利語符號在Windows軟件中被廣泛使用,整個Win32 API使用它,預期會影響在該平台上編寫的軟件的易讀性。

  14. C / Unix書籍,即使是非常好的書籍,比如已故的W Richard Stevens所寫的書籍,往往可以通過亞馬遜市場以非常便宜的價格獲得。 沒有特別的順序,請獲取K&R, Stevens APUEUNP 1 &2, Dragon book, Rochkind, Programming Pearls, PetzoldRichter (如果在Windows上工作)和任何其他經典C / Unix作品的副本。 閱讀,用鉛筆塗鴉,通常與書籍互動。

  15. 網上有很多很好的C / Unix編程資源。

  16. 閱讀並理解C編程的十誡以及關於誡命背後的原因和原因的一些元討論。 這在一定程度上顯示了它的年齡,儘管其中大部分仍然是相關的,並且模糊的編譯器在嵌入式系統世界中仍然很常見

  17. 如果你想編寫解析器, Lex和Yacc是你的朋友。

  18. 正如Navicore 在下面指出的那樣(+1) ,Hanson的“C接口和實現”是模塊化架構的接口/實現設計的破敗,有大量示例。 我實際上聽說過這本書並且聽到了很多關於它的好消息,雖然我不能聲稱已經讀過它。 除了我上面描述的C語言之外,這個概念可以說是良好程序設計的核心。 實際上,其他過程語言(如Modula-2)實際上在設計中明確表達了這一概念。 這可能是最接近“C程序架構”的書籍。

  19. 閱讀C FAQ


大衛漢森的“C接口和實現”解決了我從OO回到C的問題。

C接口和實現

說真的,它的方法在避免意外地建造許多非oo系統結束的大型紗線球方面產生了巨大的差異。


更大的應用? C的優勢在於你必須處理諸如設備驅動程序,調度程序和其他OS風格的東西之類的低級別事物。

你可以製作像OO一樣操作的C,但是這將是一種重新發明輪子的練習。


雖然它是一個與語言無關的文本,但Code Complete在代碼結構和組織方面以及構建實踐方面提供了很多很好的指導。





design