C/C++では、次の意味は何ですか?
for(;;){
...
}
これは、while(true)
と同等の無限ループです。終了条件が指定されていない場合、条件はデフォルトでtrue
になります。
CおよびC++(および他の多くの言語も)では、for
ループには3つのセクションがあります。
例えば:
_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(;;)
ループは基本的に次のことを意味します:
つまり、これは無限ループです。
ループ内のbreak
、exit
、throw
などのステートメントが実行されるまでループします。基本的に、for
ループは次のもので構成されていると考えることができます。
for (setup; test; advance)
...
「テスト」が空の場合はtrue
と見なされ、ループは継続して実行されます。空の「セットアップ」と「アドバンス」は単に何もしません。
break
、exit
、またはgoto
ステートメントがあるまで続く無限ループ。
この答え が両方の構成が等しいことを示唆している場合でも、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 ; } }
と同等になると述べています