多层宏的使用--Apple的学习笔记

作者: applecai | 来源:发表于2022-09-16 20:32 被阅读0次

    一,前言

    最近在看如何设计优化代码。然后看到了一段居然看不懂的代码,主要是和宏相关,所以分析下。

    二,代码分析

    #define TEST_LIST(in) \
    in(A)\
    in(B)\
    
    #define DEFINE_MYTAG(_v) _v,
    enum myFlag {
    TEST_LIST(DEFINE_MYTAG)
    myNone = 0,
    };
    #undef DEFINE_MYTAG
    

    后来了解到

    宏展开是从外层进行的,将外层的参数展开,最后才是对外层展开。按这样的原则,我就能看懂了。那么来拆包TEST_LIST(DEFINE_MYTAG)。

    步骤1,对外层展开
    变成如下

    (DEFINE_MYTAG)(A)
    (DEFINE_MYTAG)(B)
    

    步骤2,展开第二层宏
    由于#define DEFINE_MYTAG(_v) _v,所以步骤1的效果等于

    A
    B
    

    这段代码就是用了TEST_LIST(in)又可以用来定义函数,又可以来定义枚举。

    三,小结

    又学到一招,有机会就可以用起来了。哈哈~

    相关文章

      网友评论

        本文标题:多层宏的使用--Apple的学习笔记

        本文链接:https://www.haomeiwen.com/subject/xltsortx.html