C语言-预处理之“##”和“#”的作用

本文详细介绍了C语言中预处理器的两种特殊符号:连接符(##)和字符串化符号(#)。连接符用于将两个Token连接成一个Token,而字符串化符号则用于将宏参数转换为字符串。通过具体示例展示了这两种符号如何在宏定义和宏调用中发挥作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

双井号“##”

“##”在C语言中被称为连接符(concatenator),它用来连接两个Token为一个Token(Token是编译原理中的概念,编译器在编译源程序时,会首先扫描源代码,将代码分解为一个一个的Token,Token可以是C语言的关键字,如int、for、while等,也可以是用户自定义变量,如string、num、a等)。例如下面代码中的宏:

#define LWIP_MEMPOOL(name, num, size, desc)  MEMP_##name /*宏定义*/
LWIP_MEMPOOL(example, num, size, desc)				     /*宏调用*/
MEMP_example											 /*宏展开的结果*/

单井号“#”

“#”经常会在C语言的宏定义中被使用到,“#”的功能是将其后的宏参数进行字符串化(Stringfication),简单说就是将其所引用的宏变量字符串化,即在相应变量的左右各加上一个双引号。例如下面代码中的宏:

#define ERROR_IF(expression) {if(expression) printf("error:"#expression"\n");}/*宏定义*/
ERROR_IF(a==b)																  /*宏调用*/
{if(a==b) printf("error:""a==b""\n");}										  /*宏展开的结果*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智小星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值