Xcode编译问题

Ily*_*nev 2 c xcode

我在Xcode中创建了一个简单的项目来进行算法实验,现在我正在尝试实现mergesort.mergesort函数的原型是

//mergesort.h
void merge(long *left, long *right, int lsize, int rsize);
void mergesort(long *data, int datasize);
Run Code Online (Sandbox Code Playgroud)

实施是

//mergesort.c
void merge(long *left, long *right, int lsize, int rsize){

int i = 0, j = 0, k = 0;
long *temp = malloc(sizeof(long) * (rsize + lsize));

while(i < lsize && j < rsize){
    if(left[i] < right[j]){
        temp[k++] = left[i++];
    }else{
        temp[k++] = right[j++];
    }

    if(i == lsize){
        for(;j < rsize;){
            temp[k++] = right[j++];
        }
    }

    if(j == rsize){
        for(;i < lsize;){
            temp[k++] = left[i++];
        }
    }
}
memcpy(left, temp, sizeof(long) * (lsize + rsize));
free(temp);
}

void mergesort(long *data, int datasize){
    int lsize, rsize;
    lsize = datasize / 2;
    rsize = datasize - lsize;

    if(lsize  < 1 || rsize < 1){
        return;
    }else{
        mergesort(data, lsize);
        mergesort(data + lsize, rsize);
        merge(data, data + lsize, lsize, rsize);
    }
Run Code Online (Sandbox Code Playgroud)

所以问题是我无法编译代码.我想知道编译器说:"函数调用的参数太少,预期4,对mergesort()的调用有2",即在mergesort(data,lsize); mergesort(data + lsize,rsize);

这是为什么?这是默认的xcode编译器的奇怪功能还是我做错了什么?

Tom*_*mmy 6

您的问题几乎肯定是函数mergesort已经在<stdlib.h>原型中定义:

int
 mergesort(void *base, size_t nel, size_t width,
     int (*compar)(const void *, const void *));
Run Code Online (Sandbox Code Playgroud)

即四个论点.因此,无论何时失败的呼叫,这显然都会造成歧义.

可能最安全的做法是重命名你的功能.