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

C語言預處理命令全解:宏定義、文件包含、條件編譯

     編輯:C 語言入門

預處理階段

編譯前處理 # 開頭指令:宏定義、文件包含、條件編譯。輸出純 C 代碼供編譯器使用。

一、宏定義

1. 無參宏


#define PI 3.1415926
// 預處理將所有 PI 替換為 3.1415926
// 注意:行尾無分號,否則連分號一起替換導致語法錯誤

2. 帶參宏


#define S(r) PI*(r)*(r)
// 調用 S(a+1) → PI*(a+1)*(a+1)
// 宏名與括號間**不可有空格**,否則變為無參宏
#define S (r) PI*(r)*(r)  // 錯誤!展開為 PI*(r)*(r)(a+1)

參數替換規則:形參被實參文本替換,非參數字符保留。

3. 宏 vs 函數

二、文件包含


#include    // 系統頭文件(標準路徑搜尋)
#include "filename"   // 用戶文件(當前目錄優先搜尋)

將指定文件內容完整插入當前位置。防止重複包含慣用 #ifndef GUARD_H #define GUARD_H ... #endif。

三、條件編譯

1. #ifdef / #ifndef / #else / #endif


#ifdef COMPUTER_A
#define INT_SIZE 16
#else
#define INT_SIZE 32
#endif

2. #if / #elif / #else / #endif


#if VERSION >= 2
#define FEATURE_X
#elif VERSION == 1
#define FEATURE_Y
#else
#define FEATURE_Z
#endif

常見用途

  • 跨平台適配(不同架構類型大小)。
  • 調試開關(#ifdef DEBUG)。
  • 防止頭文件重複包含。
  • 代碼版本裁剪。

總結

預處理器提供強大的文本操作能力,善用可提高可移植性與靈活性。核心原則:宏用於常量/簡單展開,複雜邏輯用函數;條件編譯隔離平台差異;文件包含管理模組依賴。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性宏函數
類型檢查無有
開銷無調用開銷有調用開銷
代碼膨脹多次展開增大體積單一實體
調試難(無符號)易
副作用參數多次求值風險單次求值