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

如果您使用的是正确的老式 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 回答
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 标准。这甚至可以让你内联int i,即像这样:for(int i = 0; i < size; i++)

于 2012-11-15T15:17:20.070 回答
2

你不能在 C99 C 之前的代码中声明变量。移动你的int i; 到块的开头,靠近其余的变量声明。

于 2012-11-15T15:17:24.900 回答