失踪 ;在“类型”错误之前

时间:2012-11-15 15:15:11

标签: c compiler-construction

这是我的代码的一部分,你知道导致这个缺失的原因吗?在“类型”错误之前?当我在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) {
        // ...
    }

3 个答案:

答案 0 :(得分: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++)

答案 1 :(得分: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) {
        // ...
    }

答案 2 :(得分:2)

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