宏定义中的#和##

#

#可以把参数插入到字符串中
使用拼接字符串我们可以写出如下代码: 
#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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值