代码之家  ›  专栏  ›  技术社区  ›  Some Name

在宏函数中处理varargs的协调方法

  •  0
  • Some Name  · 技术社区  · 6 年前

    我试图理解如何一致地处理宏函数中的vararg(即避免 gcc 的逗号吞咽 ##__VA_ARGS__ )我写的是:

    #define IS_DEFINED(ARG) strlen(#ARG)
    #define FOO(a, ...) \
        if(IS_DEFINED(__VA_ARGS__)){\
            printf(#a, __VA_ARGS__)\
        } else {\
            printf(#a)\
        }
    

    但它不会生成有效的程序测试。 FOO(1) 扩展到

    if(strlen("")){ printf("1", ) } else { printf("1") };
    

    它不会编译。

    有没有办法用一个参数和vararg处理vararg宏函数的情况?

    0 回复  |  直到 6 年前