函数定义中的函数声明具有错误的签名?

时间:2016-04-14 11:34:09

标签: c function function-declaration

我遇到了以下代码:

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. 为什么声明的签名(参数)与代码中调用这些函数的方式不匹配?
  3. 如果这不是函数声明,那么这是什么?

1 个答案:

答案 0 :(得分:2)

是的,这是一些函数原型声明。

正如任何声明一样,你可以将它们放在一个函数中。它是函数 definitions (即它们的实现),你不能拥有其他函数。

至于论证不匹配,这就是C的工作原理。如果你没有声明任何参数,那么函数将被声明为具有未知数量的未知类型的参数,并且你可以真正地调用它们传递任何东西,编译器将不知道它是对还是错。