重複の可能性:
C/C++ マクロでの Do-While および if-else ステートメント マクロ
を定義するときの do while(0) の使用法は?
次のようなコードをよく見かけます。
#define foo() do { xxx; yyy; zzz; } while (0)
ここで do-while ラッパーが使用されるのはなぜですか? なぜ単純に
#define foo() { xxx; yyy; zzz; }
?
編集:セミコロンを削除しました。
重複の可能性:
C/C++ マクロでの Do-While および if-else ステートメント マクロ
を定義するときの do while(0) の使用法は?
次のようなコードをよく見かけます。
#define foo() do { xxx; yyy; zzz; } while (0)
ここで do-while ラッパーが使用されるのはなぜですか? なぜ単純に
#define foo() { xxx; yyy; zzz; }
?
編集:セミコロンを削除しました。
これが簡単な答えです。
#define foo() do { xxx; yyy; zzz; } while (0)
#define foo() { xxx; yyy; zzz; }
if (condition)
foo();
else
x++;
do-while バージョンを使用すると、次のように正しく展開されます。
if (condition)
do { xxx; yyy; zzz; } while (0);
else
x++;
{} バージョンを使用すると、これに展開されます。これは構文エラーです ( に一致if
しませんelse
)。2 行目の余分なセミコロンに注意してください。
if (condition3)
{ xxx; yyy; zzz; };
else
x++;