メモの日々


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バージョンアップ
  • オーブンレンジ用べんり棚
  • 確定申告書作成
  • 蛍光灯買う
  • ブラウンの安い電動歯ブラシ買う