嵌套宏的使用

#define f(a,b) a##b
#define g(a)  #a
#define h(a) g(a)

int main()
{

    printf("%s,", h(f(1,__LINE__)));     
    printf("%s\n",g(f(1,__LINE__)));
    return 0;
}

宏本身只起到一个符号替换的作用,展开宏的过程纯粹是简单的符号替换.

然而,C语言的宏是可以嵌套的,也就是说一个宏的参数可以是另一个宏(函数)。这个时候应该是先展开里面的宏参数还是外面的宏呢?

注:宏参数可以是宏或宏函数

  1. 一般宏的展开规律是,先展开内层宏参数,再展开外层宏函数,所以展开顺序是由内而外
  2. 如果宏中有#运算符,则不展开内层宏参数。例如g(__LINE__)的宏__LINE__不会展开,而是转变为字符串。
  3. 如果宏中有##运算符,则先展开外层宏函数,再展开内层宏参数,展开顺序变成从外到内
<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值