gpt4 book ai didi

c - 错误: ISO C forbids nested functions - What's wrong?

转载 作者:行者123 更新时间:2023-11-30 18:52:29 28 4
gpt4 key购买 nike

这种合并排序用法有什么问题吗?
我正在尝试对 main() 中给出的大小为 9 的数组进行排序。
但是,我使用 merge_sort 方法,它给了我错误:每个函数的“ISO C 禁止嵌套函数”。
当我删除 arraycpy 函数时,这些消息将不再出现,所以这显然是“arraycpy”的问题。
请注意,我无法使用 string.h 库,因为我仅限于这 3 个库。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

void merge(int a[], int na, int b[], int nb, int c[])
{
int ia, ib, ic;
for(ia = ib = ic = 0; (ia < na) && (ib < nb); ic++)
{
if(a[ia] < b[ib]) {
c[ic] = a[ia];
ia++;
}
else {
c[ic] = b[ib];
ib++;
}
}
for(;ia < na; ia++, ic++) c[ic] = a[ia];
for(;ib < nb; ib++, ic++) c[ic] = b[ib];
}

void arraycpy(int *dest, int *src, int n)
{
int i;
int *src_p, *dst_p;

src_p = (int*)src;
dst_p = (int*)dest;

for (i = 0; i < n; i++) {
*(dst_p+i) = *(src_p+i);
}

void internal_msort(int a[], int n, int helper_array[])
{
int left = n/2;
int right = n/2;
if (n < 2)
return;
internal_msort(a, left, helper_array);
internal_msort(a + left, right, helper_array);
merge(a, left, a + left, right, helper_array);
arraycpy(a, helper_array, n*sizeof(int));
}

void merge_sort(int a[], int n)
{
int *tmp_array = malloc(sizeof(int) * n);
internal_msort(a, n, tmp_array);
free(tmp_array);
}

void rem_sort(int array[], int size)
{
merge_sort(array, size);
}

int main()
{
int array[] = {3,55,72,4,21,6,9,0,4};
merge_sort(array, 9);
for (int i=0;i<9;i++)
printf("%d | ", array[i]);

return 0;
}

最佳答案

您错过了函数 arraycpyfor 循环的右大括号

void arraycpy(int *dest, int *src, int n)
{
int i;
int *src_p, *dst_p;

src_p = (int*)src;
dst_p = (int*)dest;

for (i = 0; i < n; i++) {
*(dst_p+i) = *(src_p+i);
}
// ^^^
}

因此,下一个大括号将被视为 for 循环的大括号,因此当您定义下一个函数时,它是在下一个函数 arraycpy 内定义的>

关于c - 错误: ISO C forbids nested functions - What's wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34904730/

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