You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在X宏表中跳过指定行?

如何在X宏表中跳过指定行?

哈哈,这个需求其实挺常见的!虽然X宏看起来是一股脑把所有行都展开,但确实有办法跳过指定行,我给你几个实用的思路:

  • 临时固定跳过:直接注释行
    如果只是想固定跳过某几行,最简单的方式就是在X_TABLE里把目标行注释掉,比如:

    #define X_TABLE(_)\
        _(1, a, "hi")\
        // _(2, b, "hello")\
        _(3, c, "sup")
    

    这样预处理器就会忽略注释掉的行,不会生成对应的SomeFunc调用。

  • 灵活临时跳过:用空宏“吃掉”行
    要是不想用注释,还可以定义一个空的SKIP宏,把要跳过的行包起来,展开时会直接忽略这部分内容:

    #define SKIP(_)  // 空宏,啥也不做
    #define X_TABLE(_)\
        _(1, a, "hi")\
        SKIP(_(2, b, "hello"))\
        _(3, c, "sup")
    
    #define X(_1, _2, _3) SomeFunc(_1, _2, _3);
    X_TABLE(X)
    #undef X
    #undef SKIP
    

    这个方法不用修改原有的X宏定义,临时跳过的时候套个SKIP就行,非常灵活。

  • 条件化跳过:给宏加判断参数
    如果需要根据条件动态决定要不要跳过行,可以给X_TABLE里的每个条目加一个控制参数,然后在X宏里做判断:

    #define X_TABLE(_)\
        _(1, a, "hi", keep)\
        _(2, b, "hello", skip)\
        _(3, c, "sup", keep)
    
    #define X(_1, _2, _3, ctrl) \
        #if ctrl == keep \
            SomeFunc(_1, _2, _3); \
        #endif
    X_TABLE(X)
    #undef X
    

    主流编译器(GCC、Clang、MSVC)都支持这种预处理器条件判断在宏里展开,适合需要根据编译选项或者宏定义来动态控制的场景。

备注:内容来源于stack exchange,提问作者Dess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:14:44