開頭的語句就是預處理命令
#define 定義一個預處理宏
#undef 取消宏的定義
#include 包含文件命令
#include_next 與#include相似, 但它有著特殊的用途
#if 編譯預處理中的條件命令, 相當于C語法中的if語句
#ifdef 判斷某個宏是否被定義, 若已定義, 執(zhí)行隨后的語句
#ifndef 與#ifdef相反, 判斷某個宏是否未被定義
#elif 若#if, #ifdef, #ifndef或前面的#elif條件不滿足, 則執(zhí)行#elif之后的語句, 相當于C語法中的else-if
#else 與#if, #ifdef, #ifndef對應, 若這些條件不滿足, 則執(zhí)行#else之后的語句, 相當于C語法中的else
#endif #if, #ifdef, #ifndef這些條件命令的結束標志.
defined 與#if, #elif配合使用, 判斷某個宏是否被定義
#line 標志該語句所在的行號
# 將宏參數(shù)替代為以參數(shù)值為內容的字符竄常量
## 將兩個相鄰的標記(token)連接為一個單獨的標記
#pragma 說明編譯器信息
#warning 顯示編譯警告信息
#error 顯示編譯錯誤信息
#和##用于對字符串的預處理操作, 所以他們也經(jīng)常用于printf, puts之類的字符串顯示函數(shù)中.
#用于在宏擴展之后將tokens轉換為以tokens為內容的字符串常量.
e.g.
#define TEST(a,b) printf( #a "<" #b "=%d\n", (a)<(b));
注意: #只針對緊隨其后的token有效!
##用于將它前后的兩個token組合在一起轉換成以這兩個token為內容的字符串常量. 注意##前后必須要有token.
語句中可以利用" \ "來換行.
把宏參數(shù)變?yōu)橐粋€字符串,
用##把兩個宏參數(shù)貼合在一起.
define A(x) T_##x
A(1)------〉T_1
define C(x) #x
C(1)------〉 "1 "