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

时间:2009-07-09 20:58:06

标签: c malloc return

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

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

4 个答案:

答案 0 :(得分:7)

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

这是每个功能的默认设置。

我的编译器告诉我,如果我没有定义函数,则int testFunction()未定义。

答案 3 :(得分:0)

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

请参阅here