我知道在C语言中,最好不要强制转换malloc()
的返回值。我已经读过,如果你不包含malloc()
,编译器会假定stdlib.h
返回一个int。当然,如果你试图隐式地将一个int分配给一个不是int的东西,但是这个错误可能被一个显式的强制转换所掩盖,那么它会产生错误 - 因此显然会强制malloc()
。
对于我创建的任何函数,如果该函数不存在,那么编译器会告诉我。为什么即使您没有包含malloc()
,编译器也会假设stdlib.h
返回int?在您加入malloc()
之前,stdlib.h
是否应该保持未定义?
答案 0 :(得分:7)
实际上,如果编译器没有看到你调用的任何函数的声明(不仅仅是malloc),它将假定它是extern
并返回int
。我使用的大多数编译器只会发出警告,而不是错误,除非你调高警告级别。
这可以追溯到C的早期,我认为在C99中不允许这样做。
@ Michael的评论:根据K& R(第72页),你似乎是正确的:
如果先前未声明的名称出现在表达式中并且后面跟着左括号,则上下文将其声明为函数名称,假定该函数返回一个int,并且没有任何关于它的假设参数。
答案 1 :(得分:1)
就像@Burkhard说的那样,这是默认的。如果您没有为函数定义原型,编译器将发出警告,并假设函数返回一个int。然后,如果你确实没有定义它,链接器将是一个给你一个立即停止错误的链接器。
答案 2 :(得分:0)
这是每个功能的默认设置。
我的编译器告诉我,如果我没有定义函数,则int testFunction()
未定义。
答案 3 :(得分:0)
除非另有说明,否则默认情况下假定所有函数都返回int
。
请参阅here。