之前我问了一个问题,即如果malloc的返回被强制转换,那么将被标记的错误被隐藏
,我得到的答案是:在(较旧的方言)C中,你可以调用一个尚未声明的函数; 隐式声明一个返回类型为的函数int
.因此,如果您在malloc()
不包含标题的情况下进行调用,则会得到错误地认为它返回的代码int
.如果没有强制转换,当您尝试将其分配给指针时,会出现编译器错误.使用强制转换,代码将编译,可能会产生模糊的运行时错误和冗长的调试会话.
据我所知,如果不包含<stdlib.h>
头文件编译器,则隐式声明一个返回类型为的函数int
.
但我感到困惑的是,根据malloc()
创建者定义的函数定义,void *
每当我们使用它时它都会返回,但没有<stdlib.h>
返回int
.那么它的定义如何改变,是编译器隐式改变void *
为int *
类型,还是有其他原因?
我知道我无法正确解释我的问题,但如果有人理解,请向我解释一下.
Som*_*ude 10
对于C,所有未声明的函数都被隐式声明为返回int
并采用未指定数量的未指定参数.
问题malloc
是a int
和a void *
的大小可能不同,甚至不兼容.例如,在现代64位机器上,指针是64位类型而int
32位类型,因此如果没有正确malloc
的编译器声明,则会丢弃指针的高32位.