干貨分享|小白必看!C預(yù)處理器
發(fā)布時(shí)間:2023-06-16 16:06:24
C 預(yù)處理器
C 預(yù)處理器不是編譯器的組成部分,但是它是編譯過程中一個(gè)單獨(dú)的步驟。簡(jiǎn)言之,C 預(yù)處理器只不過是一個(gè)文本替換工具而已,它們會(huì)指示編譯器在實(shí)際編譯之前完成所需的預(yù)處理。我們將把 C 預(yù)處理器(C Preprocessor)簡(jiǎn)寫為 CPP。
所有的預(yù)處理器命令都是以井號(hào)(#)開頭。它必須是第一個(gè)非空字符,為了增強(qiáng)可讀性,預(yù)處理器指令應(yīng)從第一列開始。
預(yù)處理器實(shí)例
分析下面的實(shí)例來理解不同的指令。
#define MAX_ARRAY_LENGTH 20
這個(gè)指令告訴 CPP 把所有的 MAX_ARRAY_LENGTH 定義為 20。使用 #define 定義常量來增強(qiáng)可讀性。
#include #include "myheader.h"
這些指令告訴 CPP 從系統(tǒng)庫(kù)中獲取 stdio.h,并添加文本到當(dāng)前的源文件中。下一行告訴 CPP 從本地目錄中獲取 myheader.h,并添加內(nèi)容到當(dāng)前的源文件中。
#undef FILE_SIZE#define FILE_SIZE 42
這個(gè)指令告訴 CPP 取消已定義的 FILE_SIZE,并定義它為 42。
#ifndef MESSAGE #define MESSAGE "You wish!"#endif
這個(gè)指令告訴 CPP 只有當(dāng) MESSAGE 未定義時(shí),才定義 MESSAGE。
#ifdef DEBUG /* Your debugging statements here */#endif
這個(gè)指令告訴 CPP 如果定義了 DEBUG,則執(zhí)行處理語句。在編譯時(shí),如果您向 gcc 編譯器傳遞了 -DDEBUG 開關(guān)量,這個(gè)指令就非常有用。它定義了 DEBUG,您可以在編譯期間隨時(shí)開啟或關(guān)閉調(diào)試。
預(yù)定義宏
ANSI C 定義了許多宏。在編程中您可以使用這些宏,但是不能直接修改這些預(yù)定義的宏。
預(yù)處理器運(yùn)算符
C 預(yù)處理器提供了下列的運(yùn)算符來幫助您創(chuàng)建宏:
宏延續(xù)運(yùn)算符(\)
一個(gè)宏通常寫在一個(gè)單行上。但是如果宏太長(zhǎng),一個(gè)單行容納不下,則使用宏延續(xù)運(yùn)算符(\)。例如:
#define message_for(a, b) \ printf(#a " and " #b ": We love you!\n")
字符串常量化運(yùn)算符(#)
在宏定義中,當(dāng)需要把一個(gè)宏的參數(shù)轉(zhuǎn)換為字符串常量時(shí),則使用字符串常量化運(yùn)算符(#)。在宏中使用的該運(yùn)算符有一個(gè)特定的參數(shù)或參數(shù)列表。
- 上一篇:干貨分享|C文件讀寫
- 下一篇:干貨分享|C頭文件