元のコードから終了条件を修正できます。-1/2
C99 では 0 であることが保証されているため、ループ本体が 1 回実行されるためcount == 1
、型が署名されていない場合でもそれが必要な動作である場合は、特別に処理する必要がある場合があります。
size_t count = something;
if (count > 1) {
for (size_t start = (count-2)/2; start != SIZE_MAX; --start) {
someFunction(x, start, count);
}
}
start
これが機能するのは、 の初期値が ではあり得ないことがわかっているためです。これは、2 で割ったときにSIZE_MAX
の値が得られないためです。size_t
SIZE_MAX
より一般的なループでは、 で開始しSIZE_MAX
て 0 までずっと下に行く必要があるかもしれませんが、明らかにループ本体の前に終了チェックを実行することはできませんsize_t
。終了できる値はありません。その場合を許可するには:
size_t count = SIZE_MAX, start = SIZE_MAX;
do {
someFunction(x, start, count);
} while (start-- != 0);
すべての場合において、SIZE_MAX
を に置き換えることができます。これは、すべての符号なし型の最大値に変換されるという点でより一般的ですが、混乱した質問-1
につながります。