gpt4 book ai didi

gcc - 为什么 C 允许缺少函数声明?

转载 作者:行者123 更新时间:2023-12-04 23:51:50 25 4
gpt4 key购买 nike

今天我们遇到了一个不寻常的现象,一位同事在他的代码中调用了一个正常行为的函数,这触发了 libc (gethostbyname) 中的段错误。令人费解的是,相同的函数在同一运行时的其他源文件中运行没有问题。令人惊讶的是,当使用 valgrind 时,segfault 消失了,实际上它与 valgrind 完美配合,没有报告错误。

在为安抚编译器之神做出了很多牺牲之后,我们最终意识到在调用该函数的源文件中缺少声明该函数的头文件。一旦我们添加了这个,一切都运行正常。

为什么 gcc/ld 没有生成错误(甚至是警告)表明该函数未被识别?为什么它可以与 valgrind 一起使用?

谢谢。

最佳答案

因为您没有使用正确的警告选项,例如 -Wall -Wmissing-prototypes -Wstrict-prototypes。默认情况下,gcc 接受的内容非常自由。C 语言(至少 C89)具有 隐式函数声明 的概念,其中没有原型(prototype)的函数具有从函数调用中第一次使用派生的返回类型和 arg 列表,并且缺少这些,它返回 int 并接受未指定但固定数量的参数(即不能是 vararg 函数)。

关于gcc - 为什么 C 允许缺少函数声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11687508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com