gpt4 book ai didi

c - 为什么编译器假定 malloc 返回一个 int?

转载 作者:太空狗 更新时间:2023-10-29 16:00:06 26 4
gpt4 key购买 nike

我知道在 C 语言中,最好不要转换 malloc() 的返回值。我读到如果您不包含 stdlib.h,编译器假定 malloc() 返回一个 int。当然,如果您试图将 int 隐式分配给不是 int 的东西,它会产生错误,但该错误可能会被显式强制转换所掩盖——因此存在显式强制转换 malloc().

对于我创建的任何函数,如果该函数不存在,编译器会告诉我。为什么编译器假设 malloc() 返回 int,即使您没有包含 stdlib.h?在包含 stdlib.h 之前,malloc() 不应该保持未定义状态吗?

最佳答案

实际上,如果编译器没有看到您调用的任何函数的声明(不仅仅是 malloc),它会假设它是 extern 并返回一个 int。我使用过的大多数编译器只会对此发出警告,而不是错误,除非您调高警告级别。

这可以追溯到 C 的早期,我认为这在 C99 中是不允许的。

@Michael 的评论:根据 K&R(第 72 页),您似乎是正确的:

如果一个之前没有声明过的名字出现在一个表达式中并且后面跟着一个左括号,它被上下文声明为一个函数名,该函数被假定为返回一个 int,并且没有任何关于它的假设争论。

关于c - 为什么编译器假定 malloc 返回一个 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1106409/

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