私はもう 10 年以上この式を見ています。この式が何に役立つのか考えてきました。#define でよく見かけるので、内部スコープ変数の宣言や、goto の代わりに break を使用するのに適していると思います。
他に何か良いことはありますか?使っていますか?
ベストアンサー1
これは、C でマルチステートメント操作に使用でき#define
、その後にセミコロンを置いてもif
ステートメント内で使用できる唯一の構造です。次の例が役立つかもしれません:
#define FOO(x) foo(x); bar(x)
if (condition)
FOO(x);
else // syntax error here
...;
中括弧を使用しても効果はありません。
#define FOO(x) { foo(x); bar(x); }
これをif
ステートメント内で使用するには、セミコロンを省略する必要がありますが、これは直感に反します。
if (condition)
FOO(x)
else
...
FOO を次のように定義します:
#define FOO(x) do { foo(x); bar(x); } while (0)
次の文は文法的には正しいです:
if (condition)
FOO(x);
else
....