2

SYMBOL に変数サイズを割り当てる必要があります。

typedef int SYMBOL

私は次の方法で行いました

SYMBOL test[nc] nc これは整数です。しかし、これにより次の警告が表示されます。

ISO C90 forbids variable-size array

警告を受けずにそれを行うにはどうすればよいですか?

ありがとう、テトナ

4

4 に答える 4

4

ライブラリ関数は、alloca可変サイズの配列が導入される前に意図されていました。

これはすべて、スタック ポインターのインクリメントに関係しています。典型的な定数サイズの配列の宣言では、スタック ポインターは、コンパイル時に既知の定数でインクリメントされます。可変サイズの配列が宣言されると、スタック ポインターは実行時に既知の値でインクリメントされます。

于 2011-02-15T18:24:23.910 に答える
3

次を使用して割り当てる必要がありますmalloc

SYMBOL* test = malloc(sizeof(SYMBOL) * nc);

// ...

free(test);

可変長配列は C90 では許可されていません。C99 で導入されたと思います。

于 2011-02-15T18:24:17.427 に答える
3

を使用しmallocます。ここでは、入力のサイズで配列を割り当てることができます。

int *p;
int n;
scanf(" %d", &n);
p = malloc( n * sizeof(int) );

p[0]また、( , p[1],...) 表記を使用して配列にアクセスできます。

于 2011-02-15T18:33:23.950 に答える
1

なぜ C99 を使用しないのですか? -std=c99 オプションを追加することで、gcc でこれを行うことができます。ある機能が C90 であり、それ以外のものであると認識できるほどコンパイラが優れている場合、C99 の機能を処理できるほど十分に優れているに違いありません。

于 2011-02-15T19:51:53.303 に答える