2012-04-12 12 views
2

可能性の重複:
Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?なぜCソースコードがdo ... while(0)ループでラップされるのですか?

なぜ私はdo...while(0)ループで包み、時には全体で実行するCソースコードはありますか?

do { 
    parser->http_errno = e;       
    parser->error_lineno = __LINE__;  
} while (0) 

なぜそれを使用して、この対:

parser->http_errno = e;       
parser->error_lineno = __LINE__;  

私は、これは、スレッドの安全性とは何かを持っている疑いがあるが、私はよく分かりません。

+0

あなたの疑惑はまったく間違っています。 – gnasher729

答えて

2

マクロ内で使用できるように、マクロユーザーは通常のステートメントと同様に最後にセミコロンを使用する必要があります。言い換えれば

あなたは機能のようなFOO(...)マクロ内部複数文をいつでもマクロのユーザーがすることができます(と、実際には、必須FOO(x);としてそれを呼び出すように、あなたはdo { ... } while (0)とそれを包みます単にFOO(x)(セミコロンの不足は人間とコンピュータの両方にとって奇妙なことがあります)の代わりに使用されます。

+0

これは重複しています。 – jason

+1

@Jason:私に知らせてくれてありがとう...? – Mehrdad

+0

あなたは大歓迎です! – jason

0

あなたは、主にマクロでそのようなコードを見て彼らはどのような の#define機能であるかのように(0)

、あなたは)( ものは何でも同じように使用しながら、彼らは.....振る舞います。

UPSが、私はこの質問には、リンクを修正し do { ... } while (0) — what is it good for?

前にここで感謝ルーンに答えた参照してください。

+2

そのリンクは無限ループです。 – Morpfh

関連する問題