constexpr で printf デバッグ
constexpr でも printf デバッグをやりたいことは稀によくあるんですが、そのたびに constexpr を付けたり、関数内のコードを消したりするのは手間だよねーって事でちょっと考えてみた。
[ソース]
#include <iostream> // constexpr でない場合は定義しない // #define USE_CONSTEXPR #ifdef USE_CONSTEXPR # define CONSTEXPR constexpr # define CONSTEXPR_DEBUG_SCOPE(...) #else # define CONSTEXPR # define CONSTEXPR_DEBUG_SCOPE(...) __VA_ARGS__ #endif CONSTEXPR int fact(int n){ CONSTEXPR_DEBUG_SCOPE( std::cout << "debug scope" << std::endl; std::cout << n << std::endl; ) return n == 1 ? 1 : fact(n-1) * n; } int main(){ // static_assert(fact(4) == 24, ""); fact(4); return 0; }
[出力]
debug scope 4 debug scope 3 debug scope 2 debug scope 1
と、いう感じで簡単なマクロを書いてみました。
本当は関数の呼び出し時に constexpr かそうじゃないかを切り替えできればいいんですが、定義側がごちゃごちゃしそうなので、これぐらいが楽かなぁ。