無限ループに入ることなく、これに似たものを実行するエレガントな方法は何i
ですかunsigned char
?
for (unsigned char i = 0; i < 256; ++i) {
printf("%d\n", i);
}
unsigned char i = 0;
do {
printf("%u\n",i);
}while(++i != 0);
ループテストで増分を実行し、ラップされた値に対してテストします。
一般的な経験則として、イテレータ変数が0から「Uxxx_MAX」までのすべての値を保持する必要がある場合は、アルゴリズムに対して狭すぎるタイプを選択しました。
uint16_t
代わりに使用することを検討する必要があります。
unsignedcharの代わりに大きなint型を使用できない場合が非常に多くあります。では、アプリケーションは8ビットMCU用に作成されたリアルタイム組み込みシステムですか?このループがパフォーマンスのボトルネックであることがわかりましたか?
uint8_t
を行った理由をコメントします。uint16_t
またはそれより大きい整数型を使用します。本体の後、増分の前にチェックを入れてください
for (unsigned char i = 0; ; ++i) {
printf("%d\n", i);
if(i==255)
break;
}
しかし、それならしばらくしてください。
unsigned char i = 0;
while( ) {
printf("%d\n", i);
if(i==255)
break;
++i;
}
または、チェックを押してください:
for (unsigned char i = 0; i++ < 255; ) {
printf("%d\n", i);
}
これらはすべて、後でゼロをチェックするのではなく、増分の前に255をチェックします。したがって、変数がCHARまたは現在256に制限されているが変更可能なマクロである場合、オーバーフローに依存しないため、これらは引き続き機能します。 。そこで代用int
しても、それでも機能します。