前言
GNU/Linux 承襲 Unix 的文化,對於 C 語言支援相當良好。除了剛開始要花一些時間學習如何使用系統外,GNU/Linux 是相當適合用來學習程式設計的平台,當然也包括 C 語言在內。
C 編譯器
GNU/Linux 預設的 C 編譯器是 GCC。但是也可以用其他的 C 編譯器,像是 Clang。有些學習者會刻意用 Clang 來學 C 語言,因為 Clang 吐出來的錯誤訊息比較友善。
在 CentOS 上使用以下指令安裝 GCC 和其他開發工具:
$ sudo dnf group install "Development Tools"
在 Ubuntu 上使用以下指令安裝 GCC 和其他開發工具:
$ sudo apt install build-essential
在 openSUSE 上使用以下指令安裝 GCC 和其他開發工具:
$ sudo zypper install -t pattern devel_basis
編輯器或 IDE
使用 GNU/Linux 時,會考量命令列環境和桌面環境等不同情境,因為有些 GNU/Linux 用於伺服器,這時候系統上不會有桌面環境,得用命令列環境的編輯器。
適用於命令列環境的編輯器
以下是命令列環境中常見的編輯器:
- Vi (或 Vim)
- Emacs
- Nano
- JOE (Joe's Own Editor)
在這些編輯器中,至少要會基本的 Vi (或 Vim),因為幾乎所有的 GNU/Linux 主機都會裝 Vi (或 Vim)。但 Vi 家族編輯器的操作比較複雜,對於簡單的編輯任務,可以用 Nano 就好。由於 GNU/Linux 系統上預裝 Emacs 或 JOE 的機會比較少,學習順序可以擺後面一點。
適用於桌面環境的編輯器或 IDE
如果有桌面環境可用,倒不需要堅持使用命令列環境的編輯器。因為 IDE 有編輯器沒有的好處,像是重構、自動補完、程式碼瀏覽等整合性的功能等。為了要在編輯器中模擬 IDE 的功能,我們得安裝不少外掛或是用複雜的設定。但在 IDE 中這些都是立即可用的功能。
以下是桌面環境中常見的編輯器或 IDE:
- Geany
- Anjuta
- KDevelop
- CLions (商業軟體)
- Visual Studio Code (VSCode)
筆者比較推薦 KDevelop、CLions、VSCode 等開發工具,因為這些軟體本身是跨平台的,在不同系統上可取得一致的操作邏輯。
雲端 IDE
雲端 IDE 是指網頁 IDE + GNU/Linux 虛擬機器的組合,由於雲端運算在近年來相當流行,雲端 IDE 成為一個便利的選項。最知名的雲端 IDE 就是被 Amazon 收購的 Cloud 9。當然也有一些其他的方案,讀者可自行上網搜尋比較。
管理 C 專案
C 語言本身沒有專案的概念,需用第三方工具來管理 C 專案。以下是常見的選項:
- Make
- Autotools
- CMake
傳統上的專案管理工具是 Make,但要在不同 Unix 或類 Unix 系統間寫出通用的 Makefile 相對困難,因而出現 Autotools。Autotools 的工作原理是自動偵測當下環境並產生相對應的 Makefile。但 Autotools 本身是以 shell script 寫成,僅能用在 Unix 或類 Unix 系統上。
相對來說,CMake 也可以自動生成 Makefile。除此之外,CMake 還可自動生成其他平台的專案管理組態,在泛用性上比 Autotools 好。所以 CMake 在近年來相當流行。
安裝第三方函式庫
我們不會只用標準函式庫來寫程式,而會在必要時使用合適的第三方函式庫。C 語言本身有既定的函式庫格式,但沒有套件的概念。現行的解決方式,是直接用 GNU/Linux 系統上的套件管理軟體來安裝 C 函式庫。
一般情形下,使用系統的套件管理軟體來安裝 C 函式庫比較方便。但套件是預編好的,套件維護者會以適用大部分使用者需求的考量來編譯。如果需要特殊的編譯選項,就得自己抓原始碼來編譯。
此外,套件的 C 函式庫版本可能不是最新的,如果需要較新的版本,還是要自行抓原始碼來編譯。此外,有些較小眾的 C 函式庫,不會有現成的套件可用,這時候還是得使用上游原始碼。
動手做時間:用 Anjuta 建立 C 專案
對於初心者來說,使用 IDE 可以省下撰寫專案設定檔 (Makefile 等) 的心力,將心思專注在學習語法上。使用 Code::Blocks 等跨平台 IDE 可以省下重學新的 IDE 的心力。我們這裡以 Anjuta 為例,說明如何用 IDE 寫 C 程式。
在語言類別中選 C 語言,選擇「Generic (Minimal)」:
設定專案相關資訊:
設定專案位置、授權和其他資訊:
確認專案設定正確與否:
開始編輯 C 程式碼:
撰寫第一個程式
我們這裡展示 Hello World 程式,暫時不要管程式碼的意義,這裡的重點是確保程式可順利運行:
#include <stdio.h>
int main(void)
{
printf("Hello World\n");
return 0;
}
如果使用 IDE 的讀者,選取執行 (Run) 或等效的指令即可執行。如果使用編輯器的讀者,可參考以下終端機指令:
$ gcc -o hello hello.c
$ ./hello
Hello World
如果程式順利執行,代表環境建置成功。若執行失敗,則需根據錯誤訊息來處理。
對於初期的練習,使用上述方法應該足夠。但若讀者在終端機環境中編譯 C 程式碼,久了應該會覺得反覆打指令很費時;我們在這裡介紹 GNU Make,這是一個知名的流程自動化軟體,可以減輕我們的工作量。