読者です 読者をやめる 読者になる 読者になる

Natural Software

KinectなどのDepthセンサーを中心に活動しています

C言語のマクロ

プログラム C++ C言語

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をつければ良いみたい。

こうすると意図したとおりの動作をすることが分かった。