利用宏进行调试

万能的宏

在调试代码的时候,如果想一次性输出好多变量的值和它们对应的名字,又不行写太长的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中文版.

posted @ 2024-03-29 13:27  afhuds  阅读(7)  评论(0编辑  收藏  举报