1

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

2 に答える 2

3

gcc を使用します。これにより、デフォルトで gcc 固有の拡張機能がいくつか有効になります。試す :

[igmar@devel ~]$ gcc -std=c89 -pedantic -o xxx xxx.c
xxx.c: In function 'main':
xxx.c:6: warning: ISO C90 forbids mixed declarations and code
xxx.c:8: warning: ISO C90 forbids mixed declarations and code

-pedantic は非標準の gcc 拡張機能を無効にしました。

于 2013-05-21T07:31:25.263 に答える