签名错误的函数定义中的函数声明?
Function declaration within a function definition with wrong signature?
我遇到过如下代码:
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();
这是函数声明吗?如果是;
- 为什么函数中会有函数声明?我认为函数声明应该在所有函数之外。
- 为什么声明的签名(参数)与代码中调用这些函数的方式不匹配?
如果这不是函数声明,那么这是什么?
是的,这是几个函数原型声明。
和任何声明一样,您可以将它们放在函数中。它的功能 definitions (即它们的实现)你不能在其他功能中使用。
至于参数不匹配,C 就是这样。如果您不声明任何参数,那么该函数将被声明为具有未知类型的未知数量的参数,并且您实际上可以调用它们传递几乎任何内容,编译器将不知道它是对还是错。
我遇到过如下代码:
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();
这是函数声明吗?如果是;
- 为什么函数中会有函数声明?我认为函数声明应该在所有函数之外。
- 为什么声明的签名(参数)与代码中调用这些函数的方式不匹配?
如果这不是函数声明,那么这是什么?
是的,这是几个函数原型声明。
和任何声明一样,您可以将它们放在函数中。它的功能 definitions (即它们的实现)你不能在其他功能中使用。
至于参数不匹配,C 就是这样。如果您不声明任何参数,那么该函数将被声明为具有未知类型的未知数量的参数,并且您实际上可以调用它们传递几乎任何内容,编译器将不知道它是对还是错。