2007/09/11 14:11
今さらC言語(笑)
C言語のマクロ(#define)にパラメータの文字列化というものがある。
#define TRACE( param ) printf( "%s = %d\n", #param, param );
このようなマクロを定義したときに
int value = 0;
TRACE( value );
とすると、
printf( "%s = %d\n", "value", value );
と展開される。
意外と便利な機能なのでよく使うんだけど、(UNICODEのような)ワイドキャラクタの環境になると
printf( "%ws = %d\n", "value", value );
たとえば上記のようになり、正しく表示されない。
本来は
printf( "%ws = %d\n", L"value", value );
このようにしたい。
対処は意外と簡単で、文字列化を使った場合、単純に文字列になるだけなので、
#define TRACE( param ) printf( "%ws = %d\n", L#param, param );
といったように、#の前にワイドキャラクタを表すLをつければ良いみたい。
こうすると意図したとおりの動作をすることが分かった。