Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么每次使用malloc时都会收到警告?_C_Gcc_Malloc_Warnings_Sizeof - Fatal编程技术网

为什么每次使用malloc时都会收到警告?

为什么每次使用malloc时都会收到警告?,c,gcc,malloc,warnings,sizeof,C,Gcc,Malloc,Warnings,Sizeof,如果我在代码中使用malloc: int *x = malloc(sizeof(int)); 我从gcc收到此警告: new.c:7: warning: implicit declaration of function ‘malloc’ new.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’ 您尚未执行#include您需要包含声明函数的头文件,例如: #include <s

如果我在代码中使用
malloc

int *x = malloc(sizeof(int));
我从
gcc
收到此警告:

new.c:7: warning: implicit declaration of function ‘malloc’  
new.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’

您尚未执行
#include

您需要包含声明函数的头文件,例如:

#include <stdlib.h>
#包括
如果不包含此头文件,则编译器不知道该函数。因此,它将其视为未声明。

您需要添加:

#include <stdlib.h>
#包括
此文件包括内置函数
malloc
的声明。如果不这样做,编译器会认为您需要定义自己的名为
malloc
的函数,并发出警告,因为:

  • 您没有明确声明它,并且
  • 已经有一个使用该名称的内置函数,其签名与隐式声明的签名不同(隐式声明函数时,其返回和参数类型假定为
    int
    ,这与内置的
    malloc
    不兼容,后者采用
    size\u t
    并返回
    void*

  • 养成在“帮助”中查找函数的习惯

    C的大多数帮助都是在unix手册页面上建模的

    使用:

    man malloc
    
    给出了非常有用的结果

    谷歌
    manmalloc
    会告诉你我的意思


    在unix中,您还可以了解相关的内容。

    除了其他非常好的答案之外,我想做一些挑剔的事情,并介绍一些其他答案中尚未讨论的内容


    当您使用Linux时,要在代码中使用
    malloc()

    实际上,你不必包括在内

    (尽管stdlib.h的使用非常普遍,而且可能每个非玩具程序都应该包括它,因为它提供了大量有用的C标准库函数和宏)

    您也可以将包含在内

    但是请注意,
    malloc.h
    的使用是不推荐的,它会使您的代码不可移植。如果您想使用
    malloc()
    ,您应该始终(除非有明确的理由)包括

    对这个问题的回答最好地解释了原因:


    只有当你已经知道大纲中的include
    这一行意味着你必须在你的程序中编写它。如果有人读过这里的其他答案,他们现在就会知道。术语nit:C中没有内置函数。malloc只是标准C库中的一个函数。@Jens我没有看到pro将标准库函数作为内置函数引用的问题——gcc人员显然也没有,因为错误消息中也使用了“内置”一词(这就是我这么做的原因)@sepp2k嗯,我确实看到了一个问题。这种用法是非标准的。编译器可以有内置函数,gcc可能有malloc内置函数。但正如我所写的,在C中,没有内置函数。