位元詩人 [C 語言] 應用程式設計教學

我們假設讀者已經熟悉 C 語言的語法,並準備開始用 C 寫實際應用程式。

以下內容不屬於語法本身,沒有唯一標準解法,而是目前常見、可行的設計與實作方式。
建議讀者除了參考本文,也多閱讀其他資料,並親自動手寫程式,才能真正建立起屬於自己的開發風格與實戰經驗。


本系列將介紹以下主題:

  1. Build system 的基本概念與選擇
  2. 專案結構與原始碼組織方式
  3. 跨平台開發會遇到的關鍵差異
  4. 如何用 C 模擬物件導向
  5. 在 C 中實作類似泛型的寫法
  6. 錯誤處理的策略與常見寫法
  7. 測試與簡易的測試框架
[C 語言] 程式設計教學:如何實作類別 (Class) 和物件 (Object)

真正的物件,要有狀態和行為間的連動。狀態以資料的形式儲存在物件的屬性上,行為則是透過函式來實作。C 語言並沒有真正的物件,只能撰寫在精神上貼近物件的函式。在本文中,我們會以平面座標中的點為例,展示兩種物件的寫法。 繼續閱讀

[C 語言] 程式設計教學:如何實作封裝 (Encapsulation)

若物件有進行封裝,除了透過公開介面外,我們無法更動該物件內部的狀態。C 語言不強調封裝的概念,所以我們要重新思考封裝在程式碼中的意義。封裝的目的是資訊隱藏,也就是說,只提供最少量的必要資訊,其他的部分則不開放給外部程式。 繼續閱讀

[C 語言] 程式設計教學:如何實作組合 (composition) 和繼承 (inheritance)

C 語言無法從語法上直接獲得繼承這項特性,所以我們要將繼承從表面上的意義抽離,思考繼承在程式碼的本質。基本上,繼承是一種共用程式碼及實踐子類型的方式。雖然 C 沒有繼承的語法,但我們可以用物件組合來達到程式碼重用以及模擬繼承的目的。 繼續閱讀

[C 語言] 程式設計教學:多型 (Polymorphism),使用函式指標

基本上,C 缺乏對多型的直接支援,要用一些方法去模擬。在本文中,我們使用函式指標的方式去模擬多型。 繼續閱讀

[C 語言] 程式設計教學:多型 (Polymorphism),使用聯合 (Union)

由於 C 不直接支援多型,我們要用一些手法來模擬。在上一篇文章中,我們使用函式指標,在本文中,我們使用聯合 (union) 來模擬多型。 繼續閱讀

[C 語言] 程式設計教學:撰寫函數式程式 (Functional Programming)

C 語言不是函數式語言,但仍有少數函數式程式的特性。本文中介紹一些在 C 語言中可見的函數式程式特性,這些寫法不是主流的手法,故僅供參考。 繼續閱讀

[C 語言] 程式設計教學:使用 void 指標撰寫泛型程式

撰寫 C 程式時,我們可以用 void 指標來模擬泛型;不過,這樣寫雖然有泛型的效果,但失去了型別安全;因此,請謹慎使用。 繼續閱讀

[C 語言] 程式設計教學:使用前置處理器 (Preprocessor) 撰寫擬泛型程式

用前置處理器來模擬泛型可以跳脫指標型別的限制,但卻是非主流,因為沒有型別安全且難以除錯。這已經算是一種經典反模式,讀者請自己決定要不要使用這個手法。 繼續閱讀

[C 語言] 程式設計教學:使用泛型型別巨集 (_Generic) 撰寫泛型程式

在 C11 之前,C 語言缺乏真正的泛型,雖然可以用一些語法特性來模擬泛型,但那些手法缺乏型別安全。在 C11 後,透過泛型型別巨集可取得具有型別安全的泛型。 繼續閱讀

[C 語言] 程式設計教學:透過外部模板撰寫擬泛型程式

其實泛型程式是一種模板 (template) 的概念。對於 C、Go (golang) 等不支援泛型的程式語言來說,也可以用外部模板來模擬泛型。本文以一個 C 語言的實例來說明如何以外部模板模擬泛型程式。 繼續閱讀