gpt4 book ai didi

c - Xcode编译器问题

转载 作者:行者123 更新时间:2023-12-01 13:57:32 25 4
gpt4 key购买 nike

我已经在 Xcode 中创建了一个简单的项目用于算法实验,现在我正在尝试实现合并排序。mergesort函数的原型(prototype)是

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

实现是

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

所以问题是我无法编译代码。我想知道编译器说:在调用 mergesort() 时,“函数调用的参数太少,预期为 4,有 2”,即合并排序(数据,lsize);mergesort(数据 + lsize, rsize);

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

最佳答案

您的问题几乎可以肯定是函数 mergesort已在 <stdlib.h> 中定义与原型(prototype):

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

即四个参数。因此,无论失败的调用在哪里,这显然都造成了歧义。

可能最安全的做法是重命名您的函数。

关于c - Xcode编译器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14902737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com