C語言中的宏和預處理器


C 預處理器不是編譯器的一部分,而是編譯過程中的一個單獨步驟。簡單來說,C 預處理器只是一個文字替換工具,它指示編譯器在實際編譯之前進行必要的預處理。我們將 C 預處理器稱為 CPP。

所有預處理器命令都以井號 (#) 開頭。它必須是第一個非空白字元,為了可讀性,預處理器指令應從第一列開始。以下部分列出了所有重要的預處理器指令 -

序號指令 & 描述
1#define
替換預處理器宏。
2#include
從另一個檔案插入特定的標頭檔案。
3#undef
取消定義預處理器宏。
4#ifdef
如果此宏已定義,則返回真。
5#ifndef
如果此宏未定義,則返回真。
6#if
測試編譯時條件是否為真。
7#else
#if 的替代方案。
8#elif
#else 和 #if 合併成一條語句。
9#endif
結束預處理器條件。
10#error
在 stderr 上列印錯誤訊息。
11#pragma
使用標準化方法向編譯器發出特殊命令。

一些預處理器的例子 -

分析以下示例以瞭解各種指令。

#define MAX_ARRAY_LENGTH 20

此指令告訴 CPP 將 MAX_ARRAY_LENGTH 的例項替換為 20。使用 #define 定義常量以提高可讀性。

#include <stdio.h>
#include "myheader.h"

這些指令告訴 CPP 從**系統庫**獲取 stdio.h 並將文字新增到當前原始檔中。下一行告訴 CPP 從本地目錄獲取**myheader.h**並將內容新增到當前原始檔中。

#undef FILE_SIZE
#define FILE_SIZE 42

它告訴 CPP 取消定義現有的 FILE_SIZE 並將其定義為 42。

#ifndef MESSAGE
#define MESSAGE "You wish!"
#endif

它告訴 CPP 僅在 MESSAGE 未定義時定義 MESSAGE。

#ifdef DEBUG
/* Your debugging statements here */
#endif

它告訴 CPP 在定義 DEBUG 時處理包含的語句。如果您在編譯時向 gcc 編譯器傳遞 -DDEBUG 標誌,這將很有用。這將定義 DEBUG,因此您可以在編譯過程中動態地開啟和關閉除錯。

預定義宏 -

ANSI C 定義了許多宏。儘管每個宏都可用於程式設計,但預定義宏不應直接修改。

序號宏 & 描述
1__DATE__
當前日期,以“MMM DD YYYY”格式的字元文字表示。
2__TIME__
當前時間,以“HH:MM:SS”格式的字元文字表示。
3__FILE__
包含當前檔名,以字串文字表示。
4__LINE__
包含當前行號,以十進位制常量表示。
5__STDC__
當編譯器符合 ANSI 標準時定義為 1。

示例

#include <stdio.h>
int main() {
   printf("File :%s\n", __FILE__ );
   printf("Date :%s\n", __DATE__ );
   printf("Time :%s\n", __TIME__ );
   printf("Line :%d\n", __LINE__ );
   printf("ANSI :%d\n", __STDC__ );
}

輸出

File :test.c
Date :Jun 2 2012
Time :03:36:24
Line :8
ANSI :1

更新於: 2019-07-30

3K+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告