在 C 語言開發中,預定義宏是編譯器內建的特殊識別符,它們能在編譯階段自動展開為特定資訊,極大地簡化了除錯、日誌記錄與版本控管等工作。依據 ISO C 標準,所有合規編譯器都必須提供以下五個核心宏,其命名慣例均以雙底線開頭及結尾(如 __DATE__),以區別於使用者自定義宏。
__DATE__ — 編譯日期此宏會展開為一個字串常值,格式固定為 "Mmm dd yyyy"(例如 "Mar 19 2006")。月份採用三字母縮寫,日期若小於 10 日,前方會自動補一個空格以保持欄位對齊。這在建置版本資訊或日誌時間戳記時非常實用。
__FILE__ — 目前原始檔名稱展開為包含當前原始碼檔案名稱的字串常值。若在多檔案專案中使用,能精確指出程式碼所在檔案,配合 __LINE__ 可快速定位問題程式碼位置。
__LINE__ — 目前行號展開為一個整數常量,代表該宏出現處在原始檔中的行號(從檔案開頭起算,含該行本身)。這是實作「檔案:行號」格式除錯輸出的關鍵。
__TIME__ — 編譯時間以 "hh:mm:ss" 格式(24 小時制,如 "08:00:59")提供編譯時刻的字串常值。結合 __DATE__ 可構建完整的建置時間戳記。
__STDC__ — 標準合規標誌值為整數常量 1,表示編譯器宣稱符合 ISO C 標準。雖然現代編譯器幾乎都定義為 1,但某些嵌入式或舊版編譯器可能不支援,可作為條件編譯的依據。
利用 __FILE__ 與 __LINE__ 可輕鬆打印精確的除錯位置:
printf("Debug: file = %s, line = %d\n", __FILE__, __LINE__);
輸出範例:Debug: file = main.c, line = 42,瞬間鎖定問題行數。
這五個預定義宏是 C 語言標準庫的基石,善用它們能讓程式碼更具可維護性與可追蹤性。建議開發者熟記其用法,並在專案中建立統一的除錯巨集封裝,進一步提升開發效率。