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

C語言預處理器:條件編譯三種形式與最佳實踐

     編輯:關於C語言

條件編譯三種形式

形式一:#ifdef / #else / #endif

#ifdef 標識符
程序段1
#else
程序段2
#endif

標識符已定義 → 編譯程序段1;否則編譯程序段2。#else 可省略。

形式二:#ifndef / #else / #endif

#ifndef 標識符
程序段1
#else
程序段2
#endif

功能與 #ifdef 相反:未定義 → 編譯程序段1。

常用於頭文件防重複包含:

#ifndef MYHEADER_H
#define MYHEADER_H
// 頭文件內容
#endif

形式三:#if 常量表達式 / #else / #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
}

條件編譯 vs 條件語句

特性條件編譯條件語句
處理階段預處理(編譯前)運行時
目標代碼僅包含選中分支包含所有分支
執行效率無分支開銷有分支判斷開銷
靈活性編譯期固定運行期動態

預處理功能總結

  1. 宏定義:標識符替換字符串(常量/變量/表達式)
  2. 帶參宏:實參替換形參(文本替換,非值傳遞)
  3. 宏定義加括號防運算符優先級錯誤
  4. 文件包含:多模塊共享定義,支持嵌套
  5. 條件編譯:按條件編譯不同代碼段,減小目標代碼
  6. 優勢:便於修改、閱讀、移植、調試、模塊化設計
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved