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);
}