当我们使用malloc而没有声明stdlib.h时头文件编译器返回一个int为什么?

Vik*_*rma 1 c malloc

之前我问了一个问题,即如果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位.

  • 请注意,这只适用于 C90(C 语言的旧版本)。 (2认同)