for(i=0;i>=0;i++);とは,動画が永久に終わらない、いわゆる無限ループ状態にあることを、C及びその影響を受けたプログラミング言語のfor文で表わそうとしたものである。
printf("for文とは\n");
for文は、
for (init; contidion; increment)
sentence
のように記述する。
実行される際は、
のように実行される。
例えば、
int i;
for (i = 0; i < 10; i++)
printf("%d\n", i); /* i を表示する */
とすると、0から9までの数字が表示されるであろう。
printf("このタグについて\n");
このタグで用いられている for(i=0;i>=0;i++);
について説明する。
この場合、initはi=0
に、conditionはi>=0
に、incrementはi++
(iの値を1加算する)に対応する。sentenceが;
、つまり「何もしない」が該当する。
実行すると、
ここで、通常の計算機では変数が扱える範囲には限度がある。例えば、16ビット符号付き整数であれば-32768から32767、8ビット符号無し整数であれば0から255などのような制限がある。この制限を超えて計算をすると、あたかも数の範囲が循環しているかのような結果が得られる。例えば、前述の16ビット符号付き整数を使っていて、32767に1を加えると-32768になってしまうのである。
そのため、このタグで使われているiという変数がどのような変数であるかによって、無限ループになるか否かが決定される。 仮に符号無し整数であれば、最大値に1を加えると0になるため、iが0以上という条件が偽になることはない。したがって無限ループとなる。一方、符号付き整数であった場合、最大値に1を加えると最小値となる。ここで符号付き整数の最小値は負数であるため、iは0以上という条件が偽になってしまう。そのため無限ループにはならない。
通常、無限ループをする場合には for(;;) sentence
や while(true) sentence
を用いる。(sentenceは無限に実行する文、trueはその言語に応じた真の表現)forの括弧の中が省略されているが、この場合条件は常に成り立っているとされる。
なお、余談ではあるが、iが浮動小数点数であった場合、ある一定以上の数になると1を加えても元の数になってしまう。そのため無限ループが成立する。
printf("無限ループの例\n");
#include <stdio.h>
int main(void) {
for (;;) {
printf("おめーの席ねぇから!\n");
}
return 0;
}
forを使った例。
#include <stdio.h>
int main(void) {
while (1) {
printf("おめーの席ねぇから!\n");
}
return 0;
}
whileを使った例。whileはforのうちinitとincrementが無いものと考えることができる。
#include <stdio.h>
int main(void) {
omeeno_seki_neekara:
printf("おめーの席ねぇから!\n");
goto omeeno_seki_neekara;
return 0;
}
gotoを使った例。ニコニコ動画の無限ループは@ジャンプ機能を使っているため、これが最も近い。
printf("関連動画\n");
printf("関連商品\n");
- 5
- 0pt