之前我问了一个问题,即如果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位类型而int32位类型,因此如果没有正确malloc的编译器声明,则会丢弃指针的高32位.
| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |