綾小路龍之介の素人思考

#hoge とか ## とかの話。

わけあって可変長配列をC言語で書くことになった。いろんな変数型に対応させるためになんか良いお手本無いかなぁと思って、gslで使っていたgsl_blockの実装を参考にしたところ、面白いものを見つけた。

#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)     =

デバッグプリントしたい変数を引数に与えれば、ソース内の変数名と走らせたときの該当する変数のアドレスと内容が表示される。

  1. C言語 の define マクロの可能性 - 週記くらい(BTS開発記)
  2. C 言語 マクロ講座 # ## 編: uyota 匠の一手
  3. Cプログラミング診断室/不慣れ/マクロ
  4. gsl-1.9/templates_on.h - Google ソースコード検索
  5. gsl-1.9/block/init_source.c - Google ソースコード検索

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2007-07-30T05:12:35+09:00
  2. Modified: 2007-07-30T03:57:34+09:00
  3. Generated: 2017-11-05T23:09:15+09:00