2007/09/11

C言語のマクロ

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

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

2007/09/10

リッピング

このところ、iTunesなんかのリッピングがイヤに遅かった。

遅いだけならまだしも、どうもCPUを食ってしまってるらしくマウスの動きがカクカクしてしまう。

実は昨日解決したんだけど、どうもいつの間にかDMAがOFFになってたぽい。。。

DMAをONにした途端、以前のようにすんなりと動き始めた。
なんでDMAがOFFになってしまったかはナゾのままだけど、DMAがいかにCPUの付加軽減に寄与しているかが良く分かったよ^^;