在嵌套宏中使用 __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 有问题。
我正在做类似下面的事情:
#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 有问题。