今日の雑記

生きることでいっぱいいっぱい

デバッグコード

(2004/7/20 追記)
Dでちょっと思い通りの動作しないところがあって、まあ、それはそれで別にこの場の話題ではないのですが、ある変数を状態を見ようと以下のようなコードを追加したわけです。

debug{
writefln("menu num %d",menu_now);
}

この「debug{・・・}」ってのは、「debugビルドのときだけ有効」みたいな文です(正確には「RELEASEビルドじゃなければ有効」か?)。
ちょっとこれ見てて思ったんだけど、これっていわゆる、Cで言うところの、

#ifdef DEBUG
writefln("menu num %d",menu_now);
#endif // DEBUG

と同じことなんかなー?と。「#ifdef DEBUG」ってのは、Cで「debugビルドの時のみ有効」とか思ってください。
(実際には「_DEBUG」とか、環境によって定義の仕方は変わりますが。)
で、「プログラミング作法」(ISBN: 4756136494)という本に、

「マクロは、その定義によって二通り(場合によってはそれ以上)のコードを生成するので"いかなる場合も"使用してはならない。」(大意)

と書いてます。
まあココでは別に「マクロ使うな」とか言ってる訳では無く、問題は「マクロを一切排除した」はずのD言語に「何故マクロ的な」構文(って言って良いのかしら?)が存在するのかしら?と。
ひょっとしたら、「debug{・・・]」文は、Releaseでもちゃんと解釈されるのかしら?ただ、構文チェックはするけど、バイナリにしないだけ、とか。
以上のこと、間違いあったら指摘してにょー。って、前半に書いた事無視して、他人任せかよ。