4

重複の可能性:
C での変数宣言の配置

以下の抜粋されたコードのように変数「m」を宣言すると、なぜ機能しないのか本当にわかりません???使用する前にmを宣言するので、ポイントは何ですか?? ありがとう

    int main(){

    int a[] = {2,-4,6,47,59,-6,0};
    sort(a, 7);

    int m;
    for(m = 0; m < 7; m++){
        printf("%d ",a[m]);
    }
}

しかし、最初に宣言を配列の上に置くと、機能します。

4

4 に答える 4

5

ANSICモードでコンパイルしているようです。C89では、変数宣言はブロックの先頭でのみ許可されます。

C99以降、この制限は削除されました。コンパイルする-std=c99と、どこでも変数を宣言できます。

于 2012-10-27T19:58:53.027 に答える
2

私がCで知っている限り、すべての宣言はコードの上にある必要があります

于 2012-10-27T19:54:40.570 に答える
1

おそらく、C99 を部分的にサポートする (またはまったくサポートしない) コンパイラを使用している可能性があります。このコンパイラでは、インプレース変数宣言は禁止されています。

このようなコンパイラを使用するには、「実行可能な」コードの前に変数を宣言する必要があります。

これは C89 以前の制限でした。

于 2012-10-27T19:57:57.637 に答える
0

実際には答えではありませんが、質問にはまだコメントできません。あなたが使用しているC実装がエラーを引き起こしているという上記の人々の回答に同意します。試してみることをお勧めするのは、 for (int m = 0, ...) という2つの理由があります。コンパイルされるかどうかを確認することと、スコープを調べることです(見た目から、 for ループの外に m は必要ありません)これが役立つことを願っています

于 2012-10-27T20:13:54.143 に答える