gpt4 book ai didi

c - 当我们在没有声明 stdlib.h 头文件的情况下使用 malloc 时,编译器为什么会返回一个 int?

转载 作者:太空宇宙 更新时间:2023-11-04 00:18:27 24 4
gpt4 key购买 nike

早些时候我问了一个问题 if the return of malloc is cast then the error which would be flagged is hidden我得到的答案是:在(较旧的)C 语言中,您可以调用尚未声明的函数;隐式声明一个返回类型为 int 的函数.所以,如果你调用 malloc()如果不包含 header ,您会得到错误地认为它返回了 int 的代码.如果没有强制转换,当您尝试将其分配给指针时会出现编译器错误。通过强制转换,代码可以编译,可能会出现模糊的运行时错误和冗长的调试 session 。

我理解不包含 <stdlib.h>头文件编译器隐式声明了一个返回类型为int的函数.

但根据 malloc() 我对此感到困惑由创建者定义的函数定义,它将返回 void *每当我们使用它,但没有<stdlib.h>它返回 int .那么它的定义如何改变,编译器是否隐式改变void *int *类型,还是有其他原因?

我知道我无法正确解释我的问题,但如果有人理解,请解释一下。

最佳答案

对于 C,所有未声明的函数都被隐式声明为返回 int 并采用未指定数量的未指定参数。

malloc 的问题在于 intvoid * 的大小可能不一样,甚至不兼容。例如,在现代 64 位机器上,指针是 64 位类型,而 int 是 32 位类型,因此如果您没有正确声明 malloc编译器将丢弃指针的高 32 位。

关于c - 当我们在没有声明 stdlib.h 头文件的情况下使用 malloc 时,编译器为什么会返回一个 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21327899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com