首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误: ISO C禁止嵌套函数-出什么问题了?

错误: ISO C禁止嵌套函数-出什么问题了?
EN

Stack Overflow用户
提问于 2016-01-21 00:00:21
回答 2查看 14.5K关注 0票数 0

这种合并排序用法有什么问题?

我正在尝试对main()中给出的大小为9的数组进行排序。

但是,我使用的是merge_sort方法,对于每个函数,它都会给出错误:"ISO C禁止嵌套函数“。

当我删除arraycpy函数时,这些消息将不再出现,所以这显然是"arraycpy“的问题。

请注意,我不能使用string.h .h库,因为我仅限于这3个库。

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-21 00:02:08

您在函数arraycpy中遗漏了一个用于for循环的右大括号

代码语言:javascript
复制
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中定义的

票数 2
EN

Stack Overflow用户

发布于 2021-12-08 23:52:35

我在我的主文件中遇到了同样的错误。此文件不包含不平衡。在我看来,这很奇怪。但是这个错误是由我在main.c文件中包含的另一个文件产生的。

如果找不到打开的"}“,请选中已编辑的#include文件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34904730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档