1

ここでの問題は、関数に既にいくつかのステートメントが含まれていると、関数内で変数を宣言できないことです。最初に宣言すると問題なく動作しますが、何かの後、解析エラーが発生します。例えば:

int main()
{
 int b;
 b = sisesta();
 float st[b];

 return 0;
}

サイズが別の関数によって返される配列を宣言したいのですstが、それができません! 「フロート前の解析エラー」と言います。ちなみにこれは C ですが、同じ構文を持つ他の言語の場合と同じだと思います。

どんな助けでも感謝します。

4

5 に答える 5

6

C99 より前の C 標準では、関数の先頭でローカル変数を宣言する必要があります。C99 以降、これは不要になりました。

Dev-C++ には gcc が付属しており、最近の gcc バージョンは C99 を部分的にサポートして-std=c99いるため、Dev-C++ 設定で gcc 引数リストに追加して、C99 モードをトリガーすることができます。

于 2009-01-07T12:28:19.243 に答える
2

C では、最初にすべての変数を宣言する必要があります。ステートメント間で宣言することはできません

于 2009-01-07T12:23:49.503 に答える
0

C89でも、関数の先頭ですべての宣言を行うのは文体的な選択でした。コードで発生した問題は、未知のサイズのスタックで配列を宣言しようとしたことであり、それは許可されませんでした。 C99まで。同じコードを実行するが、「float st [b]」を「b」が定数であるステートメントに置き換えると、「floatst[10]」のように機能します。

于 2009-03-18T12:11:27.280 に答える
0

新しい標準をサポートしていない古いバージョンのDevC ++を使用していたことがわかりました。最新のリリースでは、ステートメントは正常に機能します。とにかく助けてくれてありがとう。

于 2009-01-08T08:57:16.407 に答える
0

malloc()必要なサイズにすることができます(後でfloat*覚えておいてください):free()

int main()
{
 int b;
 float *st;

 b = sisesta();

 if((st = malloc(sizeof float * b)) == NULL){exit 1;}

 /* blah blah */

 free(st);
 return 0;
}
于 2009-01-07T12:39:59.703 に答える