C语言链表实现中无原型函数声明警告问题咨询
问题原因与解决方法
警告根源
你看到的警告是因为函数声明的写法不符合现代C标准的函数原型要求:
在C语言中,link *search_link() 这种带空括号的声明属于旧式非原型函数声明,它表示该函数接受任意数量、任意类型的参数(并非无参数),这种写法在C标准中已被废弃,C2x标准更是直接不再支持。
哪怕你的函数定义明确带有参数,但编译器在处理声明时,只会根据声明判断是否符合原型要求——你的声明没明确参数列表,所以触发警告。
解决方法
把函数声明改成带完整参数类型的原型形式即可:
方式1:分开声明
link *search_link(link *l, int x); link *pred_link(link *l, int x);
方式2:合并声明
link *search_link(link *, int), *pred_link(link *, int);
这样编译器就能识别出这是明确参数的函数原型,警告会消失。
补充说明
你查到的foo()改用foo(void)是针对无参数函数的情况:比如函数确实不需要参数,声明时必须写void来明确表示无参数,否则foo()同样会被当作旧式非原型声明。而你的情况是函数有参数,只是声明没把参数类型写出来,所以核心是补全声明里的参数信息。
内容的提问来源于stack exchange,提问作者gunslinger
相关产品推荐
相关产品推荐

