次のコードがあります。
int i;
for(i=0;i<2;i++) {
...
printf("i = %d\n",i);
rtdb_pull(rtdb, buf, &ncenter);
printf("i = %d\n",i);
...
}
実行すると、i=0 の間は問題なく実行されますが、i=1 になるとすぐに rtdb_pull 関数がカウンターをデクリメントしているように見えるため、ループに陥ってしまいます。これはどのように可能ですか?i を rtdb_pull に渡しません。また、rtdb_pull が i という変数を使用しません。
これを行うと、すべてが正常に機能します。
int i;
for(i=0;i<2;i++) {
...
printf("i = %d\n",i);
int j = i;
rtdb_pull(rtdb, buf, &ncenter);
i = j;
printf("i = %d\n",i);
...
}
記録のために、Ubuntu 13.04 で gcc 4.7.3 を使用し、ANSI c でコンパイルしています。コンパイラから関連する警告が表示されません。