SYMBOL に変数サイズを割り当てる必要があります。
typedef int SYMBOL
私は次の方法で行いました
SYMBOL test[nc]
、 nc
これは整数です。しかし、これにより次の警告が表示されます。
ISO C90 forbids variable-size array
警告を受けずにそれを行うにはどうすればよいですか?
ありがとう、テトナ
ライブラリ関数は、alloca
可変サイズの配列が導入される前に意図されていました。
これはすべて、スタック ポインターのインクリメントに関係しています。典型的な定数サイズの配列の宣言では、スタック ポインターは、コンパイル時に既知の定数でインクリメントされます。可変サイズの配列が宣言されると、スタック ポインターは実行時に既知の値でインクリメントされます。
次を使用して割り当てる必要がありますmalloc
。
SYMBOL* test = malloc(sizeof(SYMBOL) * nc);
// ...
free(test);
可変長配列は C90 では許可されていません。C99 で導入されたと思います。
を使用しmalloc
ます。ここでは、入力のサイズで配列を割り当てることができます。
int *p;
int n;
scanf(" %d", &n);
p = malloc( n * sizeof(int) );
p[0]
また、( , p[1]
,...) 表記を使用して配列にアクセスできます。
なぜ C99 を使用しないのですか? -std=c99 オプションを追加することで、gcc でこれを行うことができます。ある機能が C90 であり、それ以外のものであると認識できるほどコンパイラが優れている場合、C99 の機能を処理できるほど十分に優れているに違いありません。