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

调用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”声明;

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

内置函数/内建函数
在编译器的内部,有一些和标准库函数相似的内置函数(有点像关键字),内置函数主要用于优化代码。使用他们时可以不包含头文件,但函数的名称前需要加前缀__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>头文件
在这里插入图片描述
当然将头文件包含进来是最直接有效的解决办法。
关于内建函数,这里可能说的不是很好,有大佬的话可以补充一下。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值