#ifdef 標識符
程序段1
#else
程序段2
#endif
標識符已定義 → 編譯程序段1;否則編譯程序段2。#else 可省略。
#ifndef 標識符
程序段1
#else
程序段2
#endif
功能與 #ifdef 相反:未定義 → 編譯程序段1。
常用於頭文件防重複包含:
#ifndef MYHEADER_H
#define MYHEADER_H
// 頭文件內容
#endif
#if 常量表達式
程序段1
#else
程序段2
#endif
表達式非 0 → 編譯程序段1;為 0 → 編譯程序段2。
#define R 1
main() {
float c, r, s;
printf("input a number: ");
scanf("%f", &c);
#if R
r = 3.14159 * c * c;
printf("area of round is: %f\n", r);
#else
s = c * c;
printf("area of square is: %f\n", s);
#endif
}
| 特性 | 條件編譯 | 條件語句 |
|---|---|---|
| 處理階段 | 預處理(編譯前) | 運行時 |
| 目標代碼 | 僅包含選中分支 | 包含所有分支 |
| 執行效率 | 無分支開銷 | 有分支判斷開銷 |
| 靈活性 | 編譯期固定 | 運行期動態 |