前處理器運算子

# 運算子或字串化運算子用於將 Macro 引數轉換為字串文字。它只能與帶引數的巨集一起使用。

// preprocessor will convert the parameter x to the string literal x
#define PRINT(x) printf(#x "\n")

PRINT(This line will be converted to string by preprocessor);
// Compiler sees
printf("This line will be converted to string by preprocessor""\n");

編譯器連線兩個字串,最後的 printf() 引數將是一個字串文字,其末尾帶有換行符。

前處理器將忽略巨集引數之前或之後的空格。所以下面的 print 語句會給我們相同的結果。

PRINT(   This line will be converted to string by preprocessor );

如果字串文字的引數需要像雙引號()之前的轉義序列,它將由前處理器自動插入。

PRINT(This "line" will be converted to "string" by preprocessor); 
// Compiler sees
printf("This \"line\" will be converted to \"string\" by preprocessor""\n");

## 運算子或令牌貼上運算子用於連線巨集的兩個引數或標記。

// preprocessor will combine the variable and the x
#define PRINT(x) printf("variable" #x " = %d", variable##x)

int variableY = 15;
PRINT(Y);
//compiler sees
printf("variable""Y"" = %d", variableY);

最終的輸出將是

variableY = 15