3

while ループ内の条件が 0、つまり常に false の場合、do while ループの意味は何ですか。

do
{

//some code implementation.

}while(0);

私はこれが使用されている多くの場所で見てきました。その重要性は何ですか? do while(0) を省略できません。両方の方法でコードが 1 回だけ実行されるためです。

一般的な do-while ループではなく、特に while(0) 条件の使用について尋ねたので、これは重複ではありません。

4

3 に答える 3

0

do { } while(0)そのコンテキストでの構文は、gotoを実際に書き出さずに書き込む難読化された方法です。これは、goto が悪いとどこかで読んだが、その理由を理解していないカーゴ カルト プログラマーによって使用されます。

gotoこれは、適切で意味のあるラベルで書き直された Dariusz の回答の例です。

  beginAtomicOperationSequence();

  ret = doSomething();
  if (ret < 0) goto handle_error;

  ret = doSomething2();
  if (ret < 0) goto handle_error;

  ...

handle_error:
  if (ret < 0) {
    switch (ret) {
    //handle error
    }
    rollbackAboveOperations();
  } else {
    commitAboveOperations();
  }

ご覧のとおり、それは短く、完全に明らかです。その構造の目的を尋ねなければならなかったということは、それが悪い考えであることを示しています。

私たちのプロジェクトでそれを使用して悪用している同僚がいて、それに対する価値を取り戻すことが1つも見つからなかったので、私は私の答えに熱心です。ミックスにいくつかの実際のループを追加すると、さらに煩わしくなります。それから、楽しみがあなたをどこに導くかを見つけ始めbreakますcontinue

編集: goto に関する Linus Torvald の暴言へのリンクです。 http://kerneltrap.org/node/553/2131

于 2013-05-06T12:20:06.787 に答える