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

C 語言預處理器詳解:指令、宏、運算符與實戰技巧

     編輯:C 語言入門

C 語言預處理器詳解:指令、宏、運算符與實戰技巧

C 預處理器(CPP) 是編譯流程中獨立的一步,本質上是一個強大的文本替換工具。它在正式編譯前處理源代碼,所有指令均以 # 開頭(建議從第一列開始)。

核心預處理指令速查表

指令功能描述
#define定義宏(常量或函數式宏)
#include包含外部文件內容
#undef取消已定義的宏
#ifdef / #ifndef檢查宏是否定義
#if / #else / #elif / #endif條件編譯控制塊
#error輸出編譯錯誤訊息
#pragma向編譯器發送特殊指令

實戰範例解析

1. 定義常量增強可讀性

#define MAX_ARRAY_LENGTH 20

所有 MAX_ARRAY_LENGTH 會被替換為 20。

2. 文件包含

#include <stdio.h>      // 系統庫
#include "myheader.h"   // 本地目錄

3. 宏重新定義

#undef FILE_SIZE
#define FILE_SIZE 42

4. 條件定義避免重複

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

5. 調試開關控制

#ifdef DEBUG
/* 調試代碼 */
#endif

編譯時加 -DDEBUG 即可啟用調試代碼,無需修改源碼。

ANSI C 預定義宏

宏含義
__DATE__編譯日期("MMM DD YYYY")
__TIME__編譯時間("HH:MM:SS")
__FILE__當前源文件名
__LINE__當前行號
__STDC__ANSI 標準編譯時為 1

預處理器專用運算符

宏延續運算符 \

長宏換行使用:

#define message_for(a, b) \
    printf(#a " and " #b ": We love you!\n")

字符串化運算符 #

將宏參數轉為字符串字面量:

#define message_for(a, b) \
    printf(#a " and " #b ": We love you!\n")
// message_for(Carole, Debra) 展開為:
// printf("Carole" " and " "Debra" ": We love you!\n");

標記粘貼運算符 ##

合併兩個標記:

#define tokenpaster(n) printf("token" #n " = %d", token##n)
// tokenpaster(34) → printf("token34 = %d", token34);

defined() 運算符

在常量表達式中檢查宏是否定義:

#if !defined(MESSAGE)
#define MESSAGE "You wish!"
#endif

參數化宏:模擬函數

宏可接受參數,注意括號保護優先級:

#define square(x) ((x) * (x))
#define MAX(x, y) ((x) > (y) ? (x) : (y))

使用時如同函數調用,但無類型檢查,需謹慎使用副作用表達式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved