如何使用一个宏的值作为参数传递给另一个宏?

// 宏中的#号是字符串化的意思,就是说把宏参数看成一个字符串。
// 但是考虑另一种需求:我们要字符串化的参数很长,我们想用另外一个宏代替这个参数。
//                     这样的话,你字符串化会有问题,
//                     字符串化的是另一个宏的名字,而不是宏的值。
// 这就出现了本篇要讨论的问题:如何使用一个宏的值作为参数传递给另一个宏?
// 方法就是:宏传参给宏,具体的解释看代码注释。
#include <stdio.h>

int main(int argc, char *argv[])
{
#define WARN_IF(EXPR) \
do \
{ \
    if (EXPR) \
    fprintf(stderr, "Warning: " #EXPR "\n"); \
} while(0)

    int divider = 0;
    WARN_IF(divider == 0);

#define CHR \xe2\x97\x8f
#define PASSWD(x) #x#x#x#x#x#x
#define MASK(str) PASSWD(str)
// 你本以为定义2个宏就能完成的功能,PASSWD(CHR),但是并不能完成。
// 那你就再定义一个解释参数的宏,这样就ok了。
// 传给MASK的参数是CHR,但是PASSWD调用的却是CHR的值。
// 因为宏CHR被展开了。
// 这就叫宏传参给宏。
    printf("passwd:%s\n", MASK(CHR));

    return 0;
}

转载于:https://www.cnblogs.com/the-capricornus/p/6841913.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值