c-lang:反復文
制御式の値が 0 になるまで、ループ本体を繰り返して実行する制御文。
ループ一般の注意事項
一つのループでは、一つだけの機能を実現する。
ループには、必ず先頭から入る。
空のループを避ける。(コンパイラの最適化によって空のループが削除されてしまう場合が考えられる)
ループを制御する変数には、使用目的に合った、適切な名前をつける。
ループがどんな場合にも終了することを確認する。
ループの終了条件を明確にする。
無限ループを書く場合には、それが無限ループであることを明示する。
ループの入れ子は3レベル以下にする。それ以上になる場合には、関数を 用いて入れ子を浅くする。
ループはソースリスト上で一目で見渡せる程度に短くする。
forループや、whileループの文はブロックで囲んで複文にしておいた方が後でのメンテナンスがやりやすい。
code:cpp
for(i = 0; i < COUNT; i++)
foo( i); /* COUNTだけ実行される */
bar( i); /* 1回だけしか実行されない */
間違ってカッコの後ろにセミコロンを書いてしまうと、ループしないので注意。
code:cpp
for(i = 0; i < COUNT; i++); /* ←ここにセミコロンがあるので、 */
foo( i); /* ←これは1回だけしか実行されない */
forループや、whileループのNULLボディ(空文)は、それが意図されたものであることがわかるようにコメントをつける。(コメントがない場合には、セミコロンの打ち間違いを疑ってみる。)
code:cpp
while( (*dest)++ = (*src)++)
; /* No operation */
ループの制御変数の初期設定は、ループの直前で行なう。
条件式は、ループの終了判定のためだけに使用する。
条件式中の代入文は、特別な場合にのみ使用する。
ループを制御するための文は、ループの頭部または尾部にまとめておく。