[C++]#和##运算符

本文介绍了C语言中#和##运算符在宏定义中的应用,如mkstr和concat宏示例,分别展示了字符串化运算符将参数转化为字符串字面量和标记粘贴运算符连接标记的功能。
摘要由CSDN通过智能技术生成

在使用#define进行宏定义的时候,会使用到###两种运算符:

  • #:字符串化运算符(Stringizing operator)
  • ##:标记粘贴运算符(Token-pasting operator)

字符串化运算符(Stringizing operator)#

在类函数的宏(Function-like macros)中,#运算符可以把宏定义中的参数转化为字符串字面量(string literals)。

// C program to illustrate (#) operator 
#include <stdio.h> 
  
// Macro definition using the stringizing operator 
#define mkstr(s) #s 
int main(void) 
{ 
    // Printing the stringized value of "Skillvertex" 
    printf(mkstr(Skillvertex)); 
    return 0; 
}

Output

Skillvertex

解释

宏定义mkstr把字符串Skillvertex转化为字符串字面量"Skillvertex",即printf("Skillvertex")

标记粘贴运算符(Token-pasting operator)##

在宏定义中,##运算符可以把该运算符一前一后的两个标记(Token)连接在一起,结合形成一个新的标记。

// C program to illustrate (##) operator 
#include <stdio.h> 
​
// Macro definition using the Token-pasting operator 
#define concat(a, b) a##b 
int main(void) 
{ 
    int xy = 30; 
​
    // Printing the concatenated value of x and y 
    printf("%d", concat(x, y)); 
    return 0; 
}

Output

30

解释

宏定义concat用于把标记ab连接在一起,形成ab,调用的时候把xy连接在一起,形成xyxy被赋值为30,所以输出30。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FL1768317420

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

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

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

打赏作者

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

抵扣说明:

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

余额充值