9時半起床。出勤時、隣に古事記を読む女性。仕事、何となく全体像が見えてき
た。一歩進んで立ち往生。出産の事務手続きを忘却。明日やる。物件探し。吟
味するも最終的な判断は Y ちゃん。tkd さんとなか卯。牛丼。Flash9動作確認。
#define MACRO(args) ({ \ command statments; \ return_value; \ })
_ ステートを "({})" で囲むとステート(文)ではなく、"return_value" を返す式とみなされる。つまり、返り値はステートの最後に記述する必要が有り。
以下、引数 num に 10 と 20 を加算するサンプルマクロ HOGE。
#define HOGE(num) \ ({ int a; \ int b; \ a = num + 10; \ b = a + 20; \ b;}) printf("%d\n", HOGE(10)); => 40
_ 詳細は gcc の info の 3.10.4 Duplication of Side Effects を参照。なお "({})" は gcc の独自拡張なので、gcc 以外のコンパイラではコンパイルエラーになります。
余談。上記 info の min() のサンプルで使用されている typeof 演算子(変数の型を返す)も gcc の独自拡張です。
人気の脇山サロン案内