0

これは私のコードの一部です。この欠落の原因を知っていますか ; 「タイプ」エラーの前に?main() 関数で sort(arr, size) を削除すると消えます...

#include <stdio.h>

    void sort(int*, int);

    int main() {
        int arr[] = {5, 1, 3, 0, 9};
        int size = sizeof(arr) / sizeof(arr[0]);

        sort(arr, size);

        int i;
        for(i = 0; i < size; i++)
            printf("%d", arr[i]);

        getchar();
        return 0;
    }

    void sort(int *array, int size) {
        // ...
    }
4

3 に答える 3

3

ほとんどの場合、厳密にC89であるコンパイラを使用しているため、同じブロック内の非定義コードの後に​​変数を定義することはできません。int i;上記の呼び出しを移動するsortと、再び機能するはずです。

int main() {
    int arr[] = {5, 1, 3, 0, 9};
    int size = sizeof(arr) / sizeof(arr[0]);
    int i;

    sort(arr, size);

    for(i = 0; i < size; i++)
        printf("%d", arr[i]);

    getchar();
    return 0;
}

または、コンパイラがC99標準をサポートしている場合は、C99標準の使用を検討してください。これにより、をインライン化することもできますint i。つまり、次のようになります。for(int i = 0; i < size; i++)

于 2012-11-15T15:17:20.070 に答える
3

適切な古い学校のCにいる場合、関数呼び出しの後に変数を定義することはできません。

だから、ただやってください:

#include <stdio.h>

    void sort(int*, int);

    int main() {
        int arr[] = {5, 1, 3, 0, 9};
        int size = sizeof(arr) / sizeof(arr[0]);
        int i;

        sort(arr, size);


        for(i = 0; i < size; i++)
            printf("%d", arr[i]);

        getchar();
        return 0;
    }

    void sort(int *array, int size) {
        // ...
    }
于 2012-11-15T15:17:30.657 に答える
2

C99より前のCのコードの途中で変数を宣言することはできません。;を移動しますint i。ブロックの先頭、残りの変数宣言の近くまで。

于 2012-11-15T15:17:24.900 に答える