條件編譯是 C 語言預處理器的強大功能,靈活運用 #if、#ifdef、#ifndef 及 #undef 可實現代碼的靈活配置與多平台適配。本文通過完整案例深度解析其組合使用技巧。
#include <stdio.h>
#define MAX
#define MAXIMUM(x,y) x>y?x:y
#define MINIMUM(x,y) x<y?x:y
int main() {
int a=10, b=20;
// #ifdef 檢查宏是否定義
#ifdef MAX
printf("\40:The larger one is %d\n", MAXIMUM(a,b));
#else
printf("\40:The lower one is %d\n", MINIMUM(a,b));
#endif
// #ifndef 檢查宏未定義
#ifndef MIN
printf("\40:The lower is %d\n", MINIMUM(a,b));
#else
printf("\40:The larger one is %d\n", MAXIMUM(a,b));
#endif
// #undef 取消宏定義
#undef MAX
#ifdef MAX
printf("\40:The larger one is %d\n", MAXIMUM(a,b));
#else
printf("\40:The lower one is %d\n", MINIMUM(a,b));
#endif
// 重新定義後再次測試
#define MIN
#ifndef MIN
printf("\40:The lower one is %d\n", MINIMUM(a,b));
#else
printf("\40:The larger one is %d\n", MAXIMUM(a,b));
#endif
return 0;
}
MAX 已定義,輸出最大值 20MIN 未定義,輸出最小值 10#undef MAX 取消定義,進入 #else 分支輸出 10#define MIN 定義後,#ifndef MIN 為假,輸出最大值 20#ifdef DEBUG 控制日誌輸出#ifndef GUARD_H 模式宏定義名稱建議全大寫並加項目前綴(如 PROJECT_MAX),避免命名衝突。複雜條件編譯邏輯應添加註釋說明業務含義。慎用 #undef,確保作用域可控。