4

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

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

4

4 回答 4

7

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

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

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

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

于 2009-07-09T21:01:12.020 回答
1

这是每个函数的默认值。

我的编译器告诉我,如果我没有定义一个函数,那就int testFunction()没有定义。

于 2009-07-09T20:58:57.750 回答
1

就像@Burkhard 所说,这是默认设置。如果您还没有为函数定义原型,编译器会发出警告,并假定函数返回一个 int。然后,如果你真的没有定义它,链接器将给你一个立即停止的错误。

于 2009-07-09T21:01:33.140 回答
0

除非另有说明,否则所有函数都假定默认返回int

这里

于 2009-07-09T21:00:58.213 回答