预处理器运算符
#
运算符或字符串化运算符用于将 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