首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言標準預定義宏完全手冊:__DATE__、__FILE__、__LINE__ 等調試利器

     編輯:關於C

ISO C 標準規定編譯器必須提供五個核心預定義宏,它們以雙下劃線開頭結尾,為編譯時信息獲取與調試追蹤提供標準化支持。本文詳細解析每個宏的用法與實戰場景。

五大標準宏詳細說明

宏名稱類型含義示例輸出
__DATE__字符串字面值編譯日期,格式 "Mmm dd yyyy""Mar 19 2006"
__FILE__字符串字面值當前源文件名稱"main.c"
__LINE__整數常量當前行號(從文件開頭計算)42
__TIME__字符串字面值編譯時間,格式 "hh:mm:ss""08:00:59"
__STDC__整數常量是否遵循 ISO C 標準(1=是)1

調試輸出最佳實踐

__FILE__ 與 __LINE__ 組合是經典調試技巧:

#define DEBUG_LOG(fmt, ...) \
    printf("[%s:%d] " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__)

// 使用示例
DEBUG_LOG("Variable x = %d", x);
// 輸出:[main.c:42] Variable x = 10

進階應用場景

  • 版本嵌入:構建時自動注入編譯時間戳 const char* build_time = __DATE__ " " __TIME__;
  • 斷言增強:自定義 ASSERT(expr) 宏包含文件行號
  • 日誌分級:結合 __func__ (C99) 記錄函數名
  • 編譯器檢測:#if __STDC__ 區分標準/非標準模式

注意事項

  1. 宏值在預處理階段確定,非運行時動態獲取
  2. __LINE__ 會隨代碼插入刪除變化,重構需謹慎
  3. 日期時間格式為英文區域制,跨國團隊需注意解析
  4. 部分編譯器擴展宏(如 __FUNCTION__、__PRETTY_FUNCTION__)非標準

C99/C11 新增標準宏

現代標準增加:__STDC_VERSION__(標準版本號)、__STDC_HOSTED__(宿主環境)、__cplusplus(C++ 編譯器標識)等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved