为什么编译器假设 malloc 返回 int ?

2024-01-05

我知道在 C 中最好的做法是永远不要强制转换返回值malloc()。我读过编译器假设malloc()如果不包含则返回 intstdlib.h。当然,如果您尝试将 int 隐式分配给不是 int 的对象,则会产生错误,但该错误可能会被显式强制转换所掩盖 - 因此存在显式强制转换的危险malloc().

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


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

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

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

如果先前未声明的名称出现在表达式中并且后跟左括号,则上下文将其声明为函数名称,假定该函数返回 int,并且对其参数不进行任何假定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么编译器假设 malloc 返回 int ? 的相关文章

随机推荐