我在C程序中实现了链表,但在终端中给出了以下警告
linkedstr.c:36:11: warning: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype]
link *search_link() , *pred_link();
^
linkedstr.c:36:28: warning: a function declaration without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype]
link *search_link() , *pred_link();
下面是以下函数的代码
link *search_link(link *l, int x)
{
if (l == NULL)
return NULL; //end of list is reached
if (l->val == x)
return l;
else
return (search_link(l->next, x)); //search sub_list
}
link *pred_link(link *l, int x)
{
if (l == NULL || l->next == NULL)
return (NULL);
if ((l->next)->val == x)
return (l);
else
return (pred_link(l->next, x));
}
我谷歌了一下,有一个解释link ],但它说,我们不能离开参数为空,我们必须传递foo(void),而不是foo(),但我清楚地给了参数在我的函数,为什么警告?
2条答案
按热度按时间a9wyjsp71#
这个链接谈到了“没有原型的函数声明”,这是这些
以前,你可以让
()
为空,编译器必须猜测函数使用的参数。这已经“坏”了很长一段时间了,很快就会在C23中被禁止(就像编译器说的那样)。所以只要在那里添加参数类型,使它们成为原型。
xtfmy6hx2#
要理解编译器消息,你需要知道 prototype 的定义。C 2018 6.2.1 2说:
因此,当编译器消息说“没有原型的函数声明”时,它指的是这些声明:
link *search_link() , *pred_link();
link *search_link()
声明了一个函数,但没有声明其参数的类型。所以它是一个没有原型的函数声明。要解决这个问题,请将参数类型添加到声明中:
link *search_link(link *, int), pred_link(link *, int);