単純なカウント ループだけが必要な場合は、
for (i=0; i<100; i++) dostuff();
コンパイラはそれを最適化できます。
for ステートメントの continue 部分で関数を使用すると、次のようになります。
for (i=0; i<strlen(s); i++) dostuff();
関数は毎回評価されますが、関数のオーバーヘッドによってプロセスが遅くなるため、これは通常はお勧めできません。場合によっては、プロセスが使用不能になるまで遅くなることがあります。
反復中に関数の戻り値が変わらない場合は、ループから抽出します。
slen = strlen(s);
for (i=0; i<slen; i++) dostuff();
ただし、関数が呼び出しごとに異なる値を返す場合があり、ループから抽出したくない場合があります。
for (isread(fd, &buffer, ISFIRST);
isstat(fd) >= 0;
isread(fd, &buffer, ISNEXT)
{
dostuff(buffer);
}
毎回評価する必要があります。(これは、私が行っている作業に基づいて少し不自然な例ですが、可能性を示しています)。
C は、可能な限りループをロールする生の機能を提供します。ループがどのように機能するかを知る必要があり、必要に応じて可能な限り最適化します。
最後の例は、while ループとして表現できます。
isread(fd, &buffer, ISFIRST);
while (isstat(fd) >= 0)
{
dostuff(buffer);
isread(fd, &buffer, ISNEXT);
}
しかし、それはきちんとしたものではなく、ループで continue を使用すると、反復 isread を再度呼び出さなければなりません。すべてを for ループに入れると、ループがすっきりし、反復する isread が各ループで呼び出されるようになります。
このような for ループで使用できるように、低レベルの関数を作成します。while ループのすべての要素がまとめられているため、より簡単に理解できます。