gpt4 book ai didi

c - malloc困惑

转载 作者:太空狗 更新时间:2023-10-29 17:17:12 28 4
gpt4 key购买 nike

你好,看完这里的答案

1 : Do I cast the result of malloc?我知道我们不使用 malloc 的原因之一是

强制转换 malloc 是多余的

但我仍在努力弄清楚的是当我们强制转换 malloc 函数时将被抑制的警告

我还读了this回答但我有以下疑问

#include<stdio.h>
main()
{
int *a=malloc(20);
}

我理解答案中的要点,编译器会认为 malloc 返回一个 int,而我们试图将该值赋给 int *,这会给我们错误 cannot convert from int * to int or something but the basic问题是

在没有 stdlib.h 的情况下,编译器不会将 malloc 视为用户定义的函数并且不会查找它的声明并且会给出一些与缺少 delcaration/defination 相关的错误

最佳答案

在最初的 C 语言 - C89/90 中 - 调用未声明的函数不是错误。因此,C99 之前的编译器不会因缺少函数声明而产生任何“错误”。编译器将简单地假定该函数返回一个 int。 .

它还会根据您在调用中提供的参数类型自动且安静地“猜测”(推断、派生)函数参数类型。在您的示例中,您提供了 20 ,这将使编译器猜测“未知” malloc函数接受类型为 int 的单个参数.请注意,这也是不正确的,因为真正的 malloc需要 size_t参数。

在 C99 及更高版本中,函数声明是必需的。这意味着忘记申报 malloc (例如忘记包括 <stdlib.h> )确实是一个错误,这将导致诊断消息。 (尽管参数猜测行为在语言中仍然存在。)

另请注意,在 C99 及更高版本中声明函数 main没有明确的返回类型 int是非法的。 “implicit int”规则仅特定于 C 语言规范的原始版本。它不再存在于 C99 及更高版本中。您必须将其声明为 int main(...明确地。

关于c - malloc困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30723469/

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