调用malloc函数但不包含mallco或stdlib头文件时出现隐式函数声明警告提示

时间:2024-06-01 08:31:12

调用malloc函数但不包含<mallco.h>或<stdlib.h>时出现隐式函数声明警告提示

没有包含头文件时使用malloc出现的问题
在遇到动态内存分配时发现使用malloc函数时忘记把头文件带进来,但编译后没有出现错误提示,直接运行也没问题,但会出现警告提示信息(一大堆英文…),在博客搜索后大部分回答都是说是隐式函数声明问题,把头文件加进来就可以了,出于好奇我就重新搜索了一下什么是隐式函数声明,结果还是那些文章。。。于是我又去其他网站搜索,把一些零零散散的知识点结合起来,分享给大家。
(ps:因为是第一次写博客(写博客的操作也是网上搜索的哈哈),自己是个菜鸡,但又是比较好奇,文章介绍的内容不是很全面,还有很多很深入的知识我还是不太明白,所以只写了一些比较浅显的东西,一来是把它当作笔记,先这样记着,之后学的深入了继续补充,二来是希望我写的东西对像我一样刚入门并且比较好奇的小伙伴有帮助)

正文
有时在代码中引用一个函数,但是没有把头文件包含进来,编译后提示信息栏会出现一些奇奇怪怪的东西(甚至可能没有error,只是警告),以使用malloc函数时为例,一般提示信息如下:

warning: implicit declaration of function ‘malloc’
warning: incompatible implicit declaration of built-in function ‘malloc’
note: include ‘<stdlib.h>’ or provide a declaration of ‘malloc’

大概意思是:
函数“malloc”的隐式声明
内置函数“malloc”的不兼容隐式声明
并提示你包含头文件“<stdlib.h>”或提供“malloc”声明;

调用malloc函数但不包含mallco或stdlib头文件时出现隐式函数声明警告提示
隐式声明:
程序运行时,编译器在处理函数调用的那一段代码时没有找到函数原型(函数原型可以指明调用的函数的参数格数、参数类型即返回值的类型,有函数原型才能很明确的执行命令),没有找到时它只能根据这时正在处理的函数调用代码做隐式声明,并提示警告信息。但是隐式声明并不可靠,它的参数类型或返回值类型不一定和程序员预期的相符合。(因为它只是推到而来)

内置函数/内建函数
在编译器的内部,有一些和标准库函数相似的内置函数(有点像关键字),内置函数主要用于优化代码。使用他们时可以不包含头文件,但函数的名称前需要加前缀__builtin_,如:
使用malloc时:
1、# include <malloc.h>
//也可以用<stdlib.h>,可以认为<stdlib.h>内包含了 <malloc.h>
int * p;
p = (int *)malloc(sizeof(int)*10);
2、或直接
int * p;
p = (int *)__builtin_malloc(sizeof(int)*10); //无需添加<malloc.h>头文件
调用malloc函数但不包含mallco或stdlib头文件时出现隐式函数声明警告提示
当然将头文件包含进来是最直接有效的解决办法。
关于内建函数,这里可能说的不是很好,有大佬的话可以补充一下。