C語言中#、##的用法

一、#

    在预处理时,将宏参数转换为字符串。    

#define ToString(x)    #x;
printf("%s\n", ToString(test));

   预处理后,变为

printf("%s\n", "test");

二、##

    预处理时,粘连宏参数。

#define fn(a, b) void a##b(int)
fn(test, 1);

    预处理后,变为

void test1(void);

注意

    当有##、#的宏定义时,宏中的参数若还是宏定义,此时该宏不会被展开。

#define MAX_NUM 7000
#define INT(x)  #x
#define X  2
#define CON(x)  int(x##x)
printf("%s", INT(MAX_NUM));
printf("%d", CON(X));

//宏定义展开
//printf("%s", "MAX_NUM");
//printf("%d", int(XX));

解决

#define MAX_NUM 7000
#define _INT(x) #x        //转换宏
#define INT(x)  _INT(x)
#define X  2
#define _CON(x) int(x##x)
#define CON(x)  _CON(x)    //转换宏
printf("%s", INT(MAX_NUM));
printf("%d", CON(X));

//宏定义展开
//printf("%s", "7000");
//printf("%d", 22);

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值