Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 注:先前的隐含声明‘;点向前’;在这里_C - Fatal编程技术网

C 注:先前的隐含声明‘;点向前’;在这里

C 注:先前的隐含声明‘;点向前’;在这里,c,C,我似乎无法正确编译这个递归函数,我也不知道为什么。 代码如下: void point_forward (mem_ptr m) { mem_ptr temp; temp = m->next; if (temp->next != NULL) point_forward(temp); m->next = temp->next; } 我的编译器返回以下内容: mm.c:134:6:警告:“点向前”的类型冲突[默认启用] mm.c:96:2:注:之前隐含的“前进点

我似乎无法正确编译这个递归函数,我也不知道为什么。 代码如下:

void point_forward (mem_ptr m) {
  mem_ptr temp;
  temp = m->next;
  if (temp->next != NULL) point_forward(temp);
  m->next = temp->next;
}
我的编译器返回以下内容:

mm.c:134:6:警告:“点向前”的类型冲突[默认启用]
mm.c:96:2:注:之前隐含的“前进点”声明在此

关键在于:

“前进点”之前的隐含声明就在这里

在第96行,您有:

point_forward(m); // where m is a mem_ptr;
由于编译器尚未看到
点向前(m)
的函数声明,因此它“隐式定义”(即假设)了一个返回int的函数:

int point_forward(mem_ptr m);
这与后面的定义相冲突:

void point_forward (mem_ptr m) {

要解决此问题,您可以:

  • 在第96行之前的某个地方放置一个明确的声明:
    void point_forward(mem_ptr m)这将告诉编译器在第96行看到它时如何处理
    point_forward()
    ,即使它还没有看到函数实现

  • 或者,在第96行上方定义整个函数(将函数定义从第134行向前移动到第96行上方)

  • 这里有一点

    一般来说,对于风格,我会:

    • 如果不想在任何其他C文件中使用
      point\u forward()
      ,请完整定义它:

      static void point_forward(mem_ptr m){..函数体在这里..}

      在源文件的顶部

    • 如果要在其他C文件中使用
      point\u forward()
      ,请提出一个前进声明:

      void point_forward(mem_ptr m);
      
      在头文件中包含其他文件


    请粘贴第96行中的内容,这是我的代码中该函数的唯一其他实例。请将点向前移动到第96行上方。我说的移动是指剪切粘贴,你已经改变了你的评论。第96行到底是什么?我不认为这是必要的,因为这个项目是使用makefile编译的。我在页面的末尾定义了其他函数,它们在前面的几行中工作得很好。