次のループ間の一般的な差別化要因:
while (condition) {action}
do {action} while (condition)
前者は0回以上発生するループに使用され、後者は1回以上発生するループに使用されます。
つまり、条件 forwhileはループの開始時にチェックされ、 for はループdo whileの最後にチェックされます。
多くの場合、開発者が書いていることを知らないように見えるコードが表示されdo-whileます。
result = doSomething();
while (result == NOT_FINISHED) {
result = doSomething();
}
これは次のように書くとよいでしょう:
do {
result = doSomething();
} while (result == NOT_FINISHED);
ただし、条件が常にある特定のケースでは、true実際には問題になりません。次のループは基本的に同等です (1真の場合を使用)。
for (;;) { doSomething(); }
for (;;doSomething());
while (1) { doSomething(); }
do { doSomething(); } while (1);
while (doSomething(),1);
BADPAX: doSomething(); goto BADPAX;
最初のforループは、ループの継続条件を省略すると、それが常に true であると見なされるという事実を利用して、おそらく無限ループを実行する標準的な方法です。
2 番目のforループは、ループ本体をforステートメントの反復ごとの部分に移動するだけです。
最初のwhileものは野生で見られることもありますが、do-whileおそらくそうではありません。ここでの唯一の違いは、前者はループの一番上でチェックを永久にループし、後者はループの一番下でチェックを永久にループすることです。
最後のwhileループでは、C のコンマ演算子を、おそらく絶対にすべきではない方法で使用しています :-)
最後の 1 つは、最近では非常にまれですが、おそらくマシン コード レベルで最適化されたものです。