C 語言程式設計教學:在 Mac 下寫 C 程式

PUBLISHED ON MAY 23, 2018 — PROGRAMMING

由於 Mac 是以 BSD 系統為基礎修改而成的系統,在使用者體驗上接近其他的類 Unix 系統。本文介紹如何在 Mac 下寫 C 程式。

在 Mac 下寫 C 程式大概有三種方式:

  • 使用 Xcode
  • 使用 Code::Blocks (或其他第三方 IDE)
  • 使用 Visual Studio Code (或其他編輯器)

如果要用 Xcode 寫程式,當然要裝 Xcode,但如果沒有要用整套 Xcode IDE,只想用其內附的 C 編譯器等開發工具,蘋果將這些命令列工具獨立出來,只要安裝 Command Line Tools for Xcode 即可。另外,由於 Mac 本身缺乏套件管理程式,不論用什麼方案寫程式,通常會安裝 HomebrewMacPorts 等第三方套件管理程式,這些套件管理程式可以用來裝第三方 C 函式庫和其他軟體。筆者目前使用 Homebrew,讀者可依自身喜好選擇。

要注意在 Mac 中,預設是使用 Clang 而非 GCC,雖然 Clang 在一些地方的確比 GCC 好,而且一部分參數刻意和 GCC 相容,但這兩者還是不一樣的軟體,像是目前 Clang 尚未支援 OpenMP。如果要使用 GCC,先裝 Xcode 中的 clang,再用 Clang 從原始碼重新編譯並安裝 GCC,之後再修改 PATH 變數,將 GCC 的順位向前移即可。由於 GCC 是一個比較龐大的軟體,編譯時間較久,可以先去喝個咖啡或做一下其他的事情。

如果要用 Xcode 寫 C 程式,不是每種專案類型都支援 C 語言,要視專案類型而定。以 Xcode 9.2 來說,在「macOS」類別下的「Command-Line Tool」可用 C 來寫終端機程式,而同類別下的「Library」類別,可用 C 來寫函式庫。Xcode 預設用自製的專案管理軟體,但必要時也可以用 Makefile 等其他外部專案管理軟體。

如果使用 Code::Blocks 或其他 IDE,由於各個 IDE 會有自己的專案名稱,筆者無法在此一一羅列。大概的原則就是選「Console Application」等有關終端機程式的專案類型,語言要選 C,不要選 C++,因為 C++ 不是 C 的超集合。C 語言要寫 GUI (圖形介面) 程式的程式碼行數較多,需要外部函式庫;而且 GUI 程式要處理輸出入 (I/O) 較命令列程式麻煩得多,無法像用 Python 等腳本語言搭 Tk 寫小型 GUI 程式那麼簡單,一開始還是要耐著性子寫終端機程式。

接下來,我們用經典的 Hello World 範例來說明如何在 Mac 下撰寫 C 語言。如果使用 IDE 的讀者,請自行建立一個終端機程式類型專案,如果使用編輯器的讀者,建立一個檔名,像是 hello.c (可取其他檔名,建議用英文命名)。我們這裡以 Xcode 為例:

一開始,先選專案類型,這裡選「macOS」的「Command-Line Tool」:

Xcode 選擇專案類型

設置專案的名稱:

Xcode 設置專案名稱

設置專案存放的位置,這裡選 Documents (文件) (可選其他位置):

Xcode 設置專案位置

進入 Xcode 的編輯器,可以開始撰寫程式碼:

Xcode 編譯器

我們這裡展示 Hello World 程式,暫時不要管程式碼的意義,這裡的重點是確保程式可順利運行:

#include <stdio.h>

int main()
{
    printf("Hello World\n");
    
    return 0;
}

如果使用 IDE 的讀者,選取執行 (Run) 或等效的指令即可執行。如果使用編輯器的讀者,可參考以下終端機指令:

$ gcc -o hello hello.c
$ ./hello
Hello World

註:Mac 中的 GCC 預設是指向 Clang 的連結,而非 GNU 的 GCC。

如果程式順利執行,代表環境建置成功。若執行失敗,則需根據錯誤訊息來處理。

對於初期的練習,使用上述方法應該足夠。但若讀者在終端機環境中編譯 C 程式碼,久了應該會覺得反覆打指令很費時;我們將在後文介紹 make(1),這是一個知名的軟體編譯系統,可以減輕我們的工作量。

comments powered by Disqus