在 C 語言中,以 # 開頭的語句被稱為預處理指令(Preprocessing Directive),它們由 C 語言的預處理程序(Preprocessor)在編譯階段之前進行處理,用于對源代碼進行文本替換、條件編譯、文件包含等操作,不直接參與程序的執行邏輯,但會影響最終編譯的代碼內容。
常見的預處理指令及其功能如下:
用于將指定文件的內容插入到當前源文件中,通常用于包含頭文件(.h 文件),以便使用其中的函數聲明、宏定義、類型定義等。
語法:
示例:
用于定義宏(標識符替換規則),分為無參宏和帶參宏,預處理時會將代碼中所有宏名替換為定義的內容。
語法:
示例:
用于取消已定義的宏,使其后續不再生效。
示例:
#define NUM 100
printf("%d\n", NUM);
用于根據條件決定是否編譯某段代碼,常用于跨平臺開發、調試代碼開關等。
按條件編譯代碼塊,條件為常量表達式(預處理階段計算)。
示例:
#ifdef 宏名:如果宏已被定義,則編譯后續代碼;
#ifndef 宏名:如果宏未被定義,則編譯后續代碼(等價于
#if !defined(宏名))。
示例:
判斷宏是否被定義,功能類似 #ifdef,但更靈活(可結合 &&、|| 等邏輯運算符)。
示例:
#if defined(OS_WIN) && defined(DEBUG)
用于修改當前源文件的行號和文件名(主要影響編譯器報錯時顯示的行號信息)。
示例:
當預處理遇到 #error 時,會停止編譯并輸出指定的錯誤信息,常用于檢查宏定義是否符合預期。
示例:
#ifndef OS_LINUX
#error "此代碼僅支持Linux系統!"
用于向編譯器發送特定的指令(不同編譯器支持的 #pragma 功能可能不同),例如設置對齊方式、禁用警告等。
示例:
預處理指令以 # 開頭,作用于編譯前的預處理階段,主要功能包括:
- 包含頭文件(
#include)
- 定義 / 取消宏(
#define/#undef)
- 條件編譯(
#if/#ifdef 等)
- 輔助編譯控制(
#error/#pragma 等)
它們不產生可執行代碼,但通過文本處理影響最終編譯的代碼結構,是 C 語言中實現代碼復用、跨平臺兼容的重要工具。