c 语言中宏参数的字符串化跟宏参数的连接

c语言中的宏有无参数的宏,也有带参数的宏。
其实宏就相当与一个字符串模板,然后预处理器在有宏的标志处,把宏展开,说明白点,也就是字符串的替换工作。不过这个工作发生在编译之前,以前一直不理解,感觉c语言中的宏有多高大上,原来只是对你的c代码进行一些字符串的替换工作,替换后,还是c语言,然后才开始编译成汇编等指令。
现在说说如何定义一个有参数的宏,比如最简单的宏定义

#define MAX(a,b) (a)>(b)?(a):(b)

这样,当我们在代码中遇见MAX()的标志时候,预编译处理器(注意不是编译器)会自动替换这个模板,然后展开就相当与比较两个数字的大小;
如下所示:

int getMax(int x,int y) {
	return MAX(x, y);
}

表面上看起来引用了一个宏,其实经过预处理器进行字符串的替换工作,然后就变成这样了:

int getMax(int x,int y) {
	return (x)>(y)?(x):(y);
}

看到了没有,宏只是替换字符串,再简单不过了,就是不知道为什么其他语言没有宏这个概念。
明白了宏的概念,那么。我们进对宏的参数做两个操作,宏参数字符串化,宏参数的连接。
1.红参数的字符串化,如下:

#define STR(a) #a

通过#这个字符,就可以把宏里面的参数 a给变成字符串,举例如下

cout << STR(hello everyone!) << endl;

这样,就可以打印出 hello everyone!这个字符串!
2.宏参数的简单连接。

#define JOIN(a,b) a##b

这样就简单 的把 a,b两个变量的内容做了一个字符串的拼接操作,如下代码会输出1234.

cout << JOIN(12,34) << endl;

注意,只是简单的字符串连接。没有任何加减乘除的操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值