#
#可以把参数插入到字符串中
使用拼接字符串我们可以写出如下代码:
#define PRINT(FORMAT, VALUE) printf("the value is "FORMAT"\n", VALUE);
int main() {
int i = 10;
PRINT("%d", i+1);
return 0;
}
编译预处理后实际上的代码如下:
int main() {
printf("the value is "%d"\n", i+1);
return 0;
}
输出结果为 the value is 11
那如果我们想输出 the value i+1 is 11该怎么办呢?如何才能把i放到字符串中?
这里可以通过使用#VALUE来实现
#define PRINT(FORMAT, VALUE) printf("the value of " #VALUE " is "FORMAT "\n", VALUE);
int main() {
int i = 10;
PRINT("%d", i+1);
return 0;
}
使用 #VALUE 可以把 VALUE 转换成字符串 "VALUE" >> "i+1"
输出结果为 the value of i + 1 is 11
##
##可以把位于它两边的符号合成一个符号。
它允许宏定义从分离的文本片段创建标识符。
#define ADD_TO_SUM(num, value) \
sum##num += value;
int main() {
int sum1 = 10;
ADD_TO_SUM(1, 10);
printf("%d", sum1);
return 0;
}
ADD_TO_SUM执行的实际上是sum1 += 10
运行结果为sum1=20;