#include <iostream>
using namespace std;
#define PARENS ()
#define EXPAND(...) EXPAND4(EXPAND4(EXPAND4(EXPAND4(__VA_ARGS__))))
#define EXPAND4(...) EXPAND3(EXPAND3(EXPAND3(EXPAND3(__VA_ARGS__))))
#define EXPAND3(...) EXPAND2(EXPAND2(EXPAND2(EXPAND2(__VA_ARGS__))))
#define EXPAND2(...) EXPAND1(EXPAND1(EXPAND1(EXPAND1(__VA_ARGS__))))
#define EXPAND1(...) __VA_ARGS__
#define LOG(tag, ...) log(tag, PREPEND_NAMES(__VA_ARGS__))
#define PREPEND_NAMES(...) __VA_OPT__(EXPAND(PREPEND_NAMES_IMPL(__VA_ARGS__)))
#define PREPEND_NAMES_IMPL(first, ...) \
PREPEND_ITEM_NAME(first) __VA_OPT__(, PREPEND_NAMES_IMPL_AGAIN PARENS (__VA_ARGS__))
#define PREPEND_NAMES_IMPL_AGAIN() PREPEND_NAMES_IMPL
#define PREPEND_ITEM_NAME(item) #item " =", item, "|"
template<typename T, typename... Args>
void log(T tag, Args... args) {
cout << tag << ' ';
(..., (cout << args << ' ')) << endl;
}
int main() {
int a, b, c, d, e;
LOG("[nums]", a, b, c, d, e);
}#CPP
成功了!
宏,好牛逼;宏,好傻逼。