为什么每次使用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中,没有内置函数。