2005年02月07日(月) [長年日記]
- 風邪気味状態は治ったようだ。鼻も通っている。
■ [c] 複数文からなるマクロ
複数文からなるマクロを書く際はdo〜while(0)で囲むけど、何故そうするのかを覚えていなかったのでメモしておく。
C FAQの、10.4:cppのマクロ定義に複数の文(multi-statement)を書くにはどうすればよいか。という所に
マクロ本体は、単にカッコ{}でくくった複数の文であってはな らない。なぜならマクロが(見た目は一つの文として、かつ余計なセ ミコロンを付けて呼ばれたときに)、else節を持つif/else文のifが成 立したときの分岐に使われたときに文法エラーとなる。
と書いてあるのだけれど、理解できなかった。
if (foo) { MACRO(a, b); } else { c++; }
と書いてもエラーにならないし。で、エラーになるのは
if (foo) MACRO(a, b); else c++;
のように書いた場合だった。なるほど。
■ やること
- リンク元のスリム化
- tDiaryバージョンアップ
- FSWikiバージョンアップ
- オーブンレンジ用べんり棚
- 確定申告書作成
- 蛍光灯買う
- ブラウンの安い電動歯ブラシ買う