forループ内の変数は重荷にはならない
うちがC言語を使い始めた90年代頭には
{ int i; int num = 0; for(i=0;i<LOOP;i++) { int j; for(j=0;j<LOOP;j++) { int k; for(k=0;k<LOOP;k++) { num += k; } } } printf("%d\n",num); return 0; }
こんなふうに「ループの中で変数を定義すると処理が遅くなる」というお話があり、
{ int i,j,k; int num = 0; for(i=0;i<LOOP;i++) { for(j=0;j<LOOP;j++) { for(k=0;k<LOOP;k++) { num += k; } } } printf("%d\n",num); }
こんなふうにループの外で変数を定義するような習慣が推奨されたことがあって。当時はともかく昨今のコンパイラでは問題になることはないだろう、と思いつつもちょっと実験。
それぞれを VC6.0 、コンパイルオプション -O2 でコンパイルしでてきた .obj ファイルを比較してみたところ、ほぼ同じファイル*1が出来上がりました。
初期化が実際に動く場合はともかくとして、もう気にしないでいいみたいですね。
*1:ファイル名によって変わる部分、時間によって変わる部分がありそう。そこしか差はみつからず。