gpt4 book ai didi

c - 签名错误的函数定义中的函数声明?

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:25 25 4
gpt4 key购买 nike

我遇到过如下代码:

delete_list(list **l, item_type x)
{
list *p; /* item pointer */
list *pred; /* predecessor pointer */
list *search_list(), *predecessor_list();

p = search_list(*l,x);
if (p != NULL) {
pred = predecessor_list(*l,x);
if (pred == NULL) /* splice out out list */
*l = p->next;
else
pred->next = p->next;
free(p); /* free memory used by node */
}
}

我不太明白这行是什么意思:

    list *search_list(), *predecessor_list();

这是函数声明吗?如果是;

  1. 为什么函数中有函数声明?我认为函数声明应该在所有函数之外。
  2. 为什么声明的签名(参数)与代码中调用这些函数的方式不匹配?

如果这不是函数声明,那么这是什么?

最佳答案

是的,它是几个函数原型(prototype)声明。

和任何声明一样,您可以将它们放在函数中。它是您不能在其他函数中拥有的函数定义(即它们的实现)。

至于参数不匹配,这就是 C 的工作原理。如果您不声明任何参数,那么该函数将被声明为具有未知类型的未知数量的参数,并且您实际上可以调用它们传递几乎任何内容,编译器将不知道它是对还是错。

关于c - 签名错误的函数定义中的函数声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36621842/

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