利用宏进行调试
万能的宏
在调试代码的时候,如果想一次性输出好多变量的值和它们对应的名字,又不行写太长的printf
,怎么办?
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中文版.
好玩,爱玩!