2

重複の可能性:
C/C++ マクロでの Do-While および if-else ステートメント マクロ
を定義するときの do while(0) の使用法は?

次のようなコードをよく見かけます。

#define foo() do { xxx; yyy; zzz; } while (0)

ここで do-while ラッパーが使用されるのはなぜですか? なぜ単純に

#define foo() { xxx; yyy; zzz; }

?

編集:セミコロンを削除しました。

4

1 に答える 1

3

これが簡単な答えです。

#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++;
于 2012-12-12T20:09:30.043 に答える