web-dev-qa-db-ja.com

"for(;;)"はどういう意味ですか?

C/C++では、次の意味は何ですか?

for(;;){
    ...
}
23
sas4740

これは、while(true)と同等の無限ループです。終了条件が指定されていない場合、条件はデフォルトでtrueになります。

33
Justin Ardini

CおよびC++(および他の多くの言語も)では、forループには3つのセクションがあります。

  • ループが始まる前に実行されるループ前セクション。
  • trueであるがループの本体を実行する反復条件セクション。そして
  • ループ本体の各反復後に実行されるポスト反復セクション。

例えば:

_for (i = 1, accum = 0; i <= 10; i++)
    accum += i;
_

1から10までの数値を合計します。

これは、以下とほぼ同じです。

_i = 1;
accum = 0;
while (i <= 10) {
    accum += i;
    i++;
}
_

ただし、forステートメントのセクションが実際にcontainである必要はなく、反復条件が欠落している場合は、trueであると見なされます。

したがって、for(;;)ループは基本的に次のことを意味します:

  • ループ設定は行わないでください。
  • 永久にループします(ブレーク、リターンなどにも関わらず);そして
  • 反復後の処理は行わないでください。

つまり、これは無限ループです。

10
paxdiablo

ループ内のbreakexitthrowなどのステートメントが実行されるまでループします。基本的に、forループは次のもので構成されていると考えることができます。

for (setup; test; advance)
    ...

「テスト」が空の場合はtrueと見なされ、ループは継続して実行されます。空の「セットアップ」と「アドバンス」は単に何もしません。

6
Tony Delroy

breakexit、またはgotoステートメントがあるまで続く無限ループ。

4
bhasinusc

この答え が両方の構成が等しいことを示唆している場合でも、C言語ではfor(;;)while(1)(どちらも無限ループを作成する)の間に微妙な違いがあります(そしておそらくコンパイラ依存)。

一部のコンパイラ(Windriver DIABDataなど)は、while(1)を使用すると、「条件は常にtrue」であると警告します。

for(;;)に変更すると、警告を取り除くことができます。おそらく、後者の式が意図的に無限ループを作成するために意味的に強力であり、「常に真」の条件がまったくない(それに加えて、書くのが短い) )。

一方、Adrianがコメントで述べたように、C++言語は両方の構成要素について違いはありません。

C++標準では、欠落した条件によって暗黙のwhile句がwhile(true)と同等になり、for ( for-init-statement condition opt ; expression opt )ステートメントは{ for-init-statement while ( condition ) { statement expression ; } }と同等になると述べています