C の変数はブロックの先頭で宣言する必要があるという制限が C99 で解除されたというサイトを読みました。以下のプログラムでテストしましたが、エラーが発生しないため、実際にそうです。しかし、同じプログラムで、for
ループの最初のステートメントで変数を宣言すると、次のエラーが発生します。
'for' loop initial declarations are only allowed in C99 mode|
ここで2つのこと。で行ったように、プログラムの途中で変数を宣言することは実際に許可されているのに、ループ ステートメントi
でそれを行うことが許可されていないのはなぜですか? for
次に、コンパイラ (Codeblocks/gcc) がまだ C99 モードになっていない場合、先頭ではなく途中で変数を宣言したときにエラーが発生しなかったのはなぜですか?
#include <stdio.h>
int main (void)
{
//Proof that initialization in middle works (for i)
printf("Enter\n");
char string[20];
scanf("%s", string);
int i=20;
printf("%s,%i", string, i);
//Proved that it works
for(int j=0; j<10; j++) //THIS IS NOT ALLOWED
printf("%d\n", j);
}