编译预ANSI C编写的古老ls命令时遇malloc类型冲突错误
解决malloc类型冲突错误
错误原因
你的代码存在两处矛盾点:
- 已经包含了
<stdlib.h>头文件,该头文件中标准malloc的声明为:void *malloc(size_t size); - 又在
main函数内部手动声明了char *malloc();,这个自定义声明和标准库的malloc类型完全不匹配,直接触发编译器的类型冲突错误。
修复步骤
- 直接删除
main函数里的手动声明行:
char *malloc();
- 同时建议删除同位置的
void qsort(), exit();,因为:qsort的标准声明在<stdlib.h>中exit的标准声明也在<stdlib.h>中
这些手动声明是ANSI/ISO标准前的旧写法,现在标准库已经提供了正确的类型定义,无需重复声明。
补充说明
这份老代码是ANSI/ISO C标准出台前的产物,当时标准库函数没有统一的头文件声明规范,需要程序员手动声明。但现在的编译器遵循标准C规范,只要包含正确的头文件,就不需要再手动声明标准库函数,否则反而会因类型不匹配引发错误。
内容的提问来源于stack exchange,提问作者ZeroCool32
相关产品推荐
相关产品推荐

