我正在尝试学习宏如何工作(使用MS Visual Studio),我不理解这种行为。我已经定义了这个宏:
#define _fe_0(_call, ...)
#define _fe_1(_call, x) _call(x)
#define _fe_2(_call, x, ...) _call(x) _fe_1(_call, __VA_ARGS__)
#define _fe_3(_call, x, ...) _call(x) _fe_2(_call, __VA_ARGS__)
#define _fe_4(_call, x, ...) _call(x) _fe_3(_call, __VA_ARGS__)
#define _GET_NTH_ARG(_1, _2, _3, _4, _5, N, ...) N
#define CALL_MACRO_X_FOR_EACH(x, ...) \
_GET_NTH_ARG("ignored", ##__VA_ARGS__, \
_fe_4, _fe_3, _fe_2, _fe_1, _fe_0)(x, ##__VA_ARGS__)
然后我定义了这些行动:
#define MY_DECL_1(X) int X;
#define MY_DECL_2(X, Y) X Y;
我不明白为什么第二次操作不起作用,有人可以帮助我吗?
CALL_MACRO_X_FOR_EACH(MY_DECL_1, myVar1, myVar2) // OK
CALL_MACRO_X_FOR_EACH(MY_DECL_2, (int, myVar3), ( int, myVar4) ) // ERROR