为什么C容忍丢失函数声明?(Why does C tolerate missing function

2019-09-20 07:24发布

今天,我们跨越不同寻常的现象来了,一个同事在呼唤他的代码常乖巧的功能,这是触发了libc(的gethostbyname)段错误。 令人费解的事情是相同的功能,无需麻烦其他源文件曾在相同的运行时间。 令人吃惊的是,该段错误消失使用Valgrind的时候,其实,它完美地与工作Valgrind的,没有报告的错误。

经过大量的牺牲来安抚神灵编译我们最终意识到,头文件声明函数从调用该函数的源文件丢失。 一旦我们添加了这个在,一切都正常运行。

为什么GCC / LD不产生指示功能无法识别?为什么它的valgrind工作错误(甚至是警告)?

谢谢。

Answer 1:

因为你没有使用正确的警告选项,如-Wall -Wmissing-prototypes -Wstrict-prototypes 。 默认情况下,海湾合作委员会是在什么接受相当宽松。 C语言(至少C89)的隐函数声明的概念,在没有原型的函数具有函数调用中首次使用得到的返回类型和ARG名单,缺乏的是,它返回int和接受一个不确定但是的参数固定数量的(即不能是一个可变参数函数)。



文章来源: Why does C tolerate missing function declarations?