2

重複の可能性:
C/C++ マクロに無意味な do/while ステートメントと if/else ステートメントがあるのはなぜですか?

出くわした C ソース コードがdo...while(0)ループでラップされることがあるのはなぜですか?

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

これに対して、なぜそれを使用するのですか:

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

これはスレッドセーフと関係があると思われますが、よくわかりません。

4

2 に答える 2

2

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

言い換えれば、関数のようなマクロ内に複数のステートメントが必要な場合はいつでも、マクロユーザー単に(セミコロンがない場合は人間にとってもコンピューターにとっても奇妙です)。FOO(...)do { ... } while (0)FOO(x);FOO(x)

于 2012-04-12T04:49:46.457 に答える
0

このようなコードは主にマクロで見られ、関数 #define のように動作します。

そして、Whatever(); のように使用します。

Ups この質問は do { ... } while (0) の前にここで回答されています — 何の役に立つのですか?

リンクを修正しました。Rune に感謝します。

于 2012-04-12T04:52:06.913 に答える