万能的宏

在调试代码的时候,如果想一次性输出好多变量的值和它们对应的名字,又不行写太长的printf,怎么办?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace DEBUG {
template <typename T>
void _debug(const char* format, T t) {
cerr << format << '=' << t << endl;
}

template <class First, class... Rest>
void _debug(const char* format, First first, Rest... rest) {
while (*format != ',') cerr << *format++;
cerr << '=' << first << ",";
_debug(format + 1, rest...);
}

template <typename T>
ostream& operator<<(ostream& os, const vector<T>& V) {
os << "[ ";
for (const auto& vv : V) os << vv << ", ";
os << "]";
return os;
}

#define debug(...) _debug(#__VA_ARGS__, __VA_ARGS__)
}using namespace DEBUG;

像这样,运行debug(a, b, c)就可以输出变量a,b,c的值了(自带换行),类型随意。
具体的原理还在探究中…

Written with StackEdit中文版.