如果我在代码中使用 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 <stdlib.h>
这个文件包括了内置函数 malloc
的声明。如果你不这样做,编译器会认为你想要定义自己的名为malloc
的函数,并警告你,因为:
malloc
的内置函数,其签名与隐式声明的函数(当一个函数被隐式声明时,其返回类型和参数类型被假定为int
,这与内置的malloc
不兼容,后者接受一个size_t
并返回一个void*
。您没有执行 #include <stdlib.h>
。
你需要包含声明该函数的头文件,例如:
#include <stdlib.h>
如果你不包含这个头文件,编译器就不知道这个函数。所以它将其视为未声明的。
养成查看函数帮助文档的习惯。
C语言的大部分帮助文档都基于Unix手册页。
使用:
man malloc
提供相当有用的结果。
搜索 man malloc
将向您展示我所说的内容。
在Unix中,您还可以获得与此相关的 apropos。
#include <stdlib.h>
意味着您必须在程序中编写它时,才能这样做。 - Mechanical snail除了其他非常好的答案外,我想进行一点挑剔并涵盖其他答案中尚未讨论的内容。
当您在Linux系统上编写代码时,如果要使用malloc()
函数,实际上您并不必须要#include <stdlib.h>
头文件。(然而,因为该头文件提供了许多有用的C标准库函数和宏,所以在非玩具程序中,使用stdlib.h
是很常见的,也应该包含在内)。
您也可以使用#include <malloc.h>
来代替。但请注意,现在已经不推荐使用malloc.h
,因为这使得您的代码不可移植。如果您想使用malloc()
函数,除非有明确的原因要求不这样做,否则您应该始终#include <stdlib.h>
。
关于为什么,请参考以下问题的答案: