2

これは、私の友人の 1 人が書いた C プログラムです。私の知る限り、C99 が VLA を導入する前、またはmalloc実行時に使用する前に、コンパイル時に配列を初期化する必要がありました。

しかし、ここでプログラムはユーザーから a の値を受け取り、constそれに応じて配列を初期化します。を使用しても問題なく動作gcc -std=c89していますが、私には非常に間違っているように見えます。それはすべてコンパイラに依存していますか?

#include <stdio.h>

int
main()
{
 int const n;
 scanf("%d", &n);
 printf("n is %d\n", n);
 int arr[n];
 int i;
 for(i = 0; i < n; i++)
   arr[i] = i;
 for(i = 0; i < n; i++)
   printf("%d, ", arr[i]);
 return 0;
}
4

2 に答える 2

1

これは可変長配列と呼ばれ、C99 で許可されました。c89フラグ付きモードでコンパイルすると-pedantic、コンパイラは警告を表示 します

[Warning] writing into constant object (argument 2) [-Wformat]  
[Warning] ISO C90 forbids variable length array 'arr' [-Wvla]
[Warning] ISO C90 forbids mixed declarations and code [-pedantic]
于 2013-10-06T12:28:33.177 に答える