#hogeは、関数型マクロの引数hogeを文字列として置き換えてくれる。ダブルコーテーションで引数hogeの内容を括って展開してくれると言うわけだ。と言うことでデバッグプリント用の関数を作ってみた。
#define DEBUG_PRINT_MEM(a)\
printf("# DEBUG: ");\
printf(#a);\
printf("\t(%p)\t=\t",(void *)&a);\
#define DEBUG_PRINT1(a)\
DEBUG_PRINT_MEM(a)\
printf("\n")
#define DEBUG_PRINT2(f,a)\
DEBUG_PRINT_MEM(a)\
printf(f,a);\
printf("\n")
使い方はこんなかんじで。
DEBUG_PRINT1(dma_array);
DEBUG_PRINT2("%u", dma_array->size);
DEBUG_PRINT1(dma_array->data);
で、こいつを使うと下のような感じになる。
# DEBUG: dma_array (0xbfeb030c) = # DEBUG: dma_array->size (0x804c0a0) = 100 # DEBUG: dma_array->data (0x804c0a4) =
デバッグプリントしたい変数を引数に与えれば、ソース内の変数名と走らせたときの該当する変数のアドレスと内容が表示される。