ちょっと便利なデバッグ用Cマクロ

検索でなかなか引っかからなかったのでメモしておく。

#define printf_d(x) (printf(#x " = %d\n", x))

整数だけだとちょっと寂しいので浮動小数点と文字列の場合を増やしてみた。
さらにもう一つ説明用の文字列を取れるようにしてみた。

// 整数
#define printf_d1(x) (printf(#x " = %d\n", x))
#define printf_d2(str,x) (printf(#str " " #x " = %d\n", x))
//浮動小数点
#define printf_lf1(x) (printf(#x " = %lf\n",x))
#define printf_lf2(str, x) (printf(#str " " #x " = %lf\n",x))
// 文字列
#define printf_s1(x) (printf(#x " = %s\n",x))
#define printf_s2(str,x) (printf(#str " " #x " = %s\n",x))

実行用のソースコードこち

#include "stdio.h"
// 整数
#define printf_d1(x) (printf(#x " = %d\n", x))
#define printf_d2(str,x) (printf(#str " " #x " = %d\n", x))
//浮動小数点
#define printf_lf1(x) (printf(#x " = %lf\n",x))
#define printf_lf2(str, x) (printf(#str " " #x " = %lf\n",x))
// 文字列
#define printf_s1(x) (printf(#x " = %s\n",x))
#define printf_s2(str,x) (printf(#str " " #x " = %s\n",x))

int main(){
    int test = 123;
    int test_array[] = {1, 2, 3};
    double test_lf = 123.456;
    char *test_str = "foo";

    //整数
    printf_d1(test);
    printf_d1(test_array[0]);
    printf_d2(テストです。, test);
    printf_d2(配列,test_array[0]);

    //浮動小数点
    printf_lf1(test_lf);
    printf_lf2(浮動小数点, test_lf);

    //文字列
    printf_s1(test_str);
    printf_s2(テスト出力(文字列), test_str);

}

実行結果:

test = 123
test_array[0] = 1
テストです。 test = 123
配列 test_array[0] = 1
test_lf = 123.456000
浮動小数点 test_lf = 123.456000
test_str = foo
テスト出力(文字列) test_str = foo

最初は役に立つかもしれないけどいずれ使わなくなりそうなのがアレ。
課題の時とか、たまにデバッグするとき欲しくなる時がある。

作ったのはいいけど同じようなマクロが増えるので見た目良くない。

もっといいマクロを作りたい人は↓

TopCoderから学ぶ美しいマクロや型宣言 C++ - peroon's diary
printfデバッグに便利なファイル行数表示マクロ - 風と宇宙とプログラム
http://d.hatena.ne.jp/route150/20101030/1288466344
C 言語 マクロ講座 # ## 編: uyota 匠の一手
C 言語 マクロ講座 # 実用編: uyota 匠の一手