我需要编写一个宏,它的行为会根据是否给出 1 个参数或 2+ 个参数而有所不同。如何才能做到这一点?我看到解决方案列出了一堆宏(对于 2、对于 3、对于 4 等参数),但我想找到一个没有这个的解决方案
#define MACRO_WITH_1_ARG(arg) /* impl 1 */
#define MACRO_WITH_N_ARGS(...) /* impl 2 */
#define MACRO(...) /* magic */
MACRO("test"); // calls 1
MACRO("test", 42); // calls 2
也许简单对你来说
#define FOO(arg, ...)就足够了__VA_OPT__。但如果没有,那么:
有趣的功能:
FOO(x,)行为类似于FOO(x)(逗号,如果其后没有任何内容,则不算作具有两个参数的调用)。如果它困扰您,可以绕过它。