[C++] 212 coutデバッグのマクロ化

[M1 Mac, Big Sur 11.6.8, clang 13.0.0]

デバッグの際によく使用するcoutデバッグを簡素化するマクロがネットに公開されていたので早速アレンジしてみました。

以下のヘッダファイルを仕込むことで、DEBUG_MACRO関数により変数を簡単に出力できます。vectorや2次元vectorにも対応しています。変数名に接頭語・接尾語を付けることも可能です。

vector系はPythonにおけるprint関数のように変数名で一括出力できないので、このマクロは重宝しそうです。

#pragma once
#include <iostream>
#include <vector>

#define DEBUG_MACRO(var)  do{std::cout << #var << " : "; view(var);}while(0)
template<typename T> void view(T e){std::cout << e << std::endl;}
template<typename T> void view(const std::vector<T>& v){for(const auto& e : v){ std::cout << e << " "; } std::cout << std::endl;}
template<typename T> void view(const std::vector<std::vector<T> >& vv){ for(const auto& v : vv){ view(v); } }
#include <DEBUG_MACRO.h>

int main(){
    int test1 = 100;
    vector<string> test2 = {"a","b","c"};
    vector<vector<string>> test3 = {{"x1","x2"},{"y1","y2"}};

    DEBUG_MACRO(test1);
    DEBUG_MACRO(test2);
    DEBUG_MACRO(test3);
}
test1 : 100
test2 : a b c 
test3 : x1 x2 
y1 y2 
#pragma once
#include <iostream>
#include <vector>

#define DEBUG_MACRO(var, prefixx, suffixx)  do{std::cout << #prefixx << #var << #suffixx << " : "; view(var);}while(0)
template<typename T> void view(T e) { std::cout << e << std::endl; }
template<typename T> void view(const std::vector<T>& v) { for (const auto& e : v) { std::cout << e << " "; } std::cout << std::endl; }
template<typename T> void view(const std::vector<std::vector<T> >& vv) { for (const auto& v : vv) { view(v); } }

参考サイト