前處理器運算子
#
運算子或字串化運算子用於將 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