C 語言程式設計教學:C 程式設計者的工具箱

PUBLISHED ON MAY 16, 2018 — PROGRAMMING

    本文儘量不限定特定平台,而偏向於總論。一般來說,C 程式設計者需要以下工具:

    • 編譯器 (compiler)
    • 標準函式庫 (standard library)
    • 第三方函式庫 (third-party library)
    • 編輯器 (editor) 或整合式開發環境 (IDE, integrated development environment)

    除了上述必要的工具,還有一些非必備的工具,但會有所幫助:

    • 軟體編譯系統 (software build system)
    • 程式碼檢查 (static code analysis tool)
    • 除錯器 (debugger)
    • 效能評測器 (profiler)
    • 檢查記憶體使用的軟體 (memory usage checker)
    • 套件管理軟體 (package manager)
    • 版本控制軟體 (version control system)
    • 撰寫文件的軟體 (documentation generator)

    接下來,我們會簡要地說明各項工具,如果需要和特定平台相關的訊息,可見後續文章。

    編譯器和標準函式庫是用來從 C 程式碼 (code) 產生電腦程式 (program) 的軟體,通常會一併發布。編譯器是將 C 程式碼轉為電腦程式的軟體,如果沒有編譯器,C 程式碼只是有著許多特異符號的文字檔案。沒有標準函式庫,只有編譯器,就像只有程式語法卻沒有實際的功能,這樣的程式碼也沒有什麼用途。常見的編譯器有 GCCClangVisual C++ 等。

    我們在討論 Visual C++ 的時候,其實有兩層意義,一個是指 IDE,一個是指該 IDE 內附的編譯器,要根據上下文才能知道代表那個意思。至於講到 Dev-C++ 時,這是 IDE 而非編譯器,Dev-C++ 內部其實也是用 GCC 來編譯軟體。這些軟體都將 IDE 和編譯器包在一起發布,有些初學者會將兩者搞混。

    註:Visual C++ 內部實際的 C 編譯器稱為 cl.exe,但一般仍用 Visual C++ 來指稱這套軟體。

    除了標準函式庫以外,如果需要其他的功能,可以藉由第三方函式庫來節省自行撰寫的時間和心力。這些第三方函式庫是由某位開發者預先寫好的程式,可透過引入這些函式庫立即取得所需的功能;只要軟體授權 (licensing) 許可的情形下,使用第三方函式庫的確可以省下一些開發時間。一般 C 語言入門書大概都忽略這一塊,只教標準函式庫或自行實作某些資料結構、演算法等,我們只能自行查閱線上資源;另一個原因是函式庫相關的資料變動相對快,寫在書本上很容易過時。

    撰寫程式時,大部分時間都和編輯器或 IDE 互動,兩者的差別在於前者專注在程式碼編輯本身上頭,後者有較多的附加功能。雖然有一些程式設計教材會教我們用 Windows 內建的記事本 (Notepad) 等陽春的編輯器來寫程式,以苦行修練般的方式來學習,現在己經有許多編輯器或 IDE,實在不需要這樣虐待自己。

    也有一些教材會推薦 VimEmacs 這類很有駭客感的終端機編輯器,但終端機編輯器主要是在遠端連線時,沒有圖形化介面軟體時不得不的選擇,平常寫程式時絕大部分都有圖形介面可用,不太需要那麼辛苦;這類編輯器通常很有個性,需要調校一陣子才會好用,高手或神手用得出神入化,初學者用得綁手綁腳,不太需要刻意去學。

    一些支援 C 的編輯器如下:

    一些支援 C 的 IDE 如下:

    一開始學 GCC 或 clang 時,會學習透過終端機命令來編譯軟體,但隨著程式碼規模變大,每次重打指令較費時,使用軟體編譯系統可以節省編譯程式的時間。類 Unix 系統中知名的專案管理軟體是 make(1),Windows 系統雖不支援 make,但也可以很容易地在 GnuWin32 取得 make 的 Windows port。也有像是 CMake 這類跨平台的專案管理工具。有些 IDE 有自己特製的專案設置檔。

    原先 C 函式庫並沒有其他現代語言中套件 (package) 的概念,這個部分委任系統各自處理。在各個 GNU/Linux 發行版中,不同發行版會有不同的套件管理軟體,主流的有 RPM 或 APT 兩大系統。雖然 Mac 的基底是 BSD 系統,但 Mac 沒有內建的套件管理軟體,後來出現 HomebrewMacports 等第三方方案,才解決這個問題。Windows 原先沒有套件的概念,NuGet 裡面也有一些 C (或 C++) 的函式庫,最近微軟釋出 vcpkg 這套新的套件管理工具,但成效尚待觀察。Windows 目前在 C 的套件管理軟體上相對落後。

    我們這裡僅先簡介其中一部分常用的工具,最好還是搭配實際的使用情境,才能真正熟悉這些工具。

    順便插播一下一些線上的 C 語言練習環境,雖然這些線上平台無法取代真正的開發環境,對於初期練基本語法也足夠了:

    當然,我們還是會在後續文章介紹如何在本地端建置 C 開發環境。