在嵌套宏中使用 __VA_ARGS__,但参数被截断

Using __VA_ARGS__ in a nested macro, but the args are truncated

我正在做类似下面的事情:

#define AA(mac, a, ...) mac(a, __VA_ARGS__)
#define MAC1(a, b, c) a##b##c

AA(MAC1, 0, 1, 2)

我真正想要的是将“AA(MAC1, 0, 1, 2)”翻译成“012”,但我得到的是“01,2”,虽然这是合理的,但不是我想要的。

编辑: 解决方法是删除 VA_ARGS,并定义一个 AA,例如

#define AA(mac,a,b,c,d,e,f,g,h,...) mac(a,b,c,d,e,f,g,h)

#define MAC1(a, b, c) a##b##c

AA(MAC1, 0, 1, 2)

给了我什么,“012”,虽然我不知道为什么。

您的初始代码:

#define AA(mac, a, ...) mac(a, __VA_ARGS__)
#define MAC1(a, b, c) a##b##c

AA(MAC1, 0, 1, 2)

似乎工作正常:

$ gcc -E a.c > a.pp ; cat a.pp
# 1 "a.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "a.c"



012

所以,可能是您的编译器或 IDE 有问题。