温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C宏定义中的‘#’和‘##’

发布时间:2020-04-14 08:54:06 来源:网络 阅读:442 作者:暮色伊人 栏目:编程语言

/*
#是把宏参数变为一个字符串,##是把两个宏参数连接在一起。

*/

#include <stdio.h>
#define f(a,b) a##b
#define g(a)  #a
#define h(a) g(a)

int main()
{   
    f(1, 2);//宏展开: 12;
    g(3);   //宏展开: "3"

    /*
    展开宏函数的规则:
    在展开当前宏函数时,如果形参有#或##则不进行宏参数的展开,
    否则先展开宏参数,再展开当前宏。
    */
    printf("%s\n", h(f(1, 2)));//12
    printf("%s\n", g(f(1, 2)));//f(1,2) ,不进行宏参数的展开

    system("pause");
    return 0;
}

综合以上:
第一行h(f(1,2)),由于h(a)非#或者##所以先展开其参数f(1,2),即12,所以变成h(12),然后再宏替换为g(12),再次替换为12。
第二行g(f(1,2)),宏g(a)带有#,所以里面的f(1,2)不展开,所以变成f(1,2)

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI