Ilya Boltnev
Ilya Boltnev

Reputation: 1061

Xcode compiler problems

I've created a simple project in Xcode for experiments with algoritms, now I'm trying to implement mergesort. The prototype of mergesort function is

//mergesort.h
void merge(long *left, long *right, int lsize, int rsize);
void mergesort(long *data, int datasize);

The implementation is

//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);
    }

So problem is that I can't compile the code. I was wondered that compiler says: "Too few arguments to function call, expected 4, have 2" on calls of mergesort(), i.e. on mergesort(data, lsize); mergesort(data + lsize, rsize);

Why is that? Is it strange feature of default xcode compilator or I'm doing something wrong?

Upvotes: 2

Views: 110

Answers (1)

Tommy
Tommy

Reputation: 100602

Your problem is almost certainly that the function mergesort is already defined in <stdlib.h> with the prototype:

int
 mergesort(void *base, size_t nel, size_t width,
     int (*compar)(const void *, const void *));

i.e. four arguments. So that has obviously created ambiguity wherever the failing call is.

Probably the safest thing to do is to rename your function.

Upvotes: 6

Related Questions