C 語言預處理器 (Preprocessor)

C 語言的編譯過程其實分為兩個階段:

  1. 預處理 (Preprocessing):處理以 # 開頭的指令,這時候還沒開始真正編譯程式碼。
  2. 編譯 (Compilation):將處理完的程式碼轉成機器碼。

#include (檔案包含)

這是最常見的指令,用來將另一個檔案的內容原封不動地複製到目前的位置。

  • #include <stdio.h>:引用系統標準函式庫 (System Header Files)。
  • #include "my_header.h":引用使用者自定義的標頭檔 (User Header Files),通常跟 source code 在同一個目錄。

#define (巨集定義)

1. 定義常數

#define PI 3.14159
#define BUFFER_SIZE 1024

// 編譯前,程式中所有的 PI 都會被替換成 3.14159
float area = PI * r * r;

優點:增加程式可讀性,且修改方便(只要改定義的地方)。

2. 定義巨集函式 (Macro Functions)

類似函式,但其實是直接進行文字替換。

#define SQUARE(x) ((x) * (x))

int main() {
    int num = 5;
    int sq = SQUARE(num); // 展開成 ((num) * (num))
    printf("%d\n", sq);
    return 0;
}
注意:使用巨集時,參數務必加上括號,避免運算優先級錯誤。例如 SQUARE(1+2) 如果定義成 x*x 會變成 1+2*1+2 = 5 (錯誤),正確應該是 (1+2)*(1+2) = 9

條件編譯 (Conditional Compilation)

可以用來控制哪些程式碼要被編譯,這在跨平台開發非常有用。

#define WINDOWS 1

int main() {

#ifdef WINDOWS
    printf("這是一台 Windows 電腦\n");
#else
    printf("這是一台 Mac 或 Linux 電腦\n");
#endif

    return 0;
}

了解預處理器,能讓我們寫出更靈活、更容易維護的大型 C 程式。我們的 C 語言基礎教學到此告一段落,希望這些內容能為你的系統程式設計之路打下堅實的基礎!