我知道在C中,最好不要强制转换它的返回值malloc().我已经读过,malloc()如果不包含,编译器会假定返回一个int stdlib.h.当然,如果你试图隐式地将一个int分配给一个不是int的东西,那么它会产生一个错误,但是这个错误可能会被一个显式的强制转换所掩盖 - 因此有明确的强制转换的危险malloc().
对于我创建的任何函数,如果该函数不存在,那么编译器会告诉我.为什么编译器假设malloc()即使你没有包含它也会返回int stdlib.h?malloc()在包括之前,不应该保持未定义stdlib.h吗?
实际上,如果编译器没有看到你调用的任何函数的声明(不仅仅是malloc),它将假定它是extern并返回一个int.我使用的大多数编译器只会发出警告,而不是错误,除非你调高警告级别.
这可以追溯到C的早期,我不认为在C99中这是允许的.
@ Michael的评论:根据K&R(第72页),你似乎是正确的:
如果先前未声明的名称出现在表达式中并且后跟左括号,则上下文将其声明为函数名称,假定该函数返回int,并且不假设其参数.