C语言之#error/#warning

很多人写了一两年代码可能也没用过#error和#warning吧!我也是如此,因为我之前也不知道C语言中还有这玩意的存在,还是在看别人的代码后才知道有这个东西的。但是事实上你在编译代码的时候它们经常会在你的眼前晃悠,只是你不知道这些东西其实程序员也可以输出来的。
看图你就知道了:
微信公众号:嵌入式单片机软件开发
是不是很亲切啊!对咯,就是编译窗口下面的错误警告信息。
你会想,这不是编译器的事情吗?关我们程序员什么事。当然是有用了,不然C语言为什么要支持这条预处理命令呢?
看过我的驱动代码的应该知道,我的头文件有这么一句话:
在这里插入图片描述
这就是一条错误提示信息,当我的这个文件定义了 _NRF24L01P_H 这个宏就会输出如下提示信息:
在这里插入图片描述
进而告诉我这个宏定义被重复定义了,需要换个定义。
可能有些人不是很明白什么意思,那我从头开始将吧。
NRF24L01+是我大一的时候就特别想玩的一个模块,因为它能实现无线通信的功能,所以一直想好好研究一下,并写出一个完全属于自己的驱动程序。但是因为有其它事情,也是自己的能力不足,所以一直没时间。直到大四的时候一个朋友的毕业设计需要这个模块,而我对此也有过一定的研究,所以既是帮他的忙,也算实现自己的想法吧,所以花了一个星期研究、翻译了这个英文文档(关于这个英文文档翻译可在公众号搜索),最后利用了当时所有的驱动知识、C语言知识、编程风格为NRF24L01+写了一个驱动程序,可以说这个代码是我当时写驱动程序能力的集中体现吧。所以后来考虑到以后肯定会有不少需要写驱动程序的时候,所以对文件代码进行了修改,形成了自己的驱动模板,以方便以后的驱动编写。其中最重要的就是这条错误提示信息了。因为在进行代码移植的过程中,很多东西可能会忘记修改,就比如说这比较标准的头文件写法:
在这里插入图片描述
这个写法就是为了防止重复包含头文件的。但是有的时候可能你把所有的东西都修改了,可能唯独这个忘记修改了,而且因为是模板,所以如果有两份驱动代码都没修改这个宏定义,那么肯定会出问题的(如果工程中只有一个这样的宏定义是不会有问题的,但最好你的宏定义还是要和文件真正的内容匹配才对),所谓好记性不如烂笔头,烂笔头不如别人主动提醒(瞎说的),所以既然知道了这个预处理指令可以主动报错,何不利用它的这个功能呢,所以我选择在头文件加上这么几句话,只要我使用了这个模板,但是又忘记了修改宏定义,它就会主动报错给我,这样我就不用在模板头文件专门写移植步骤以防自己忘记了。而如果我没有忘记修改这个宏定义,那么这句话就没有任何作用的。
同理,#warning也是一样的,只是说这个警告不会影响程序的正常运行,不像error一样严重罢了。很多初学者都会被学长告知:警告可以不管。但事实上真的要管的。我写的代码从大一的时候开始就是0 warning,0 error(当然0 error是肯定的,不然根本不能运行程序),很多警告确实可以不管,但是也有不少警告是必须处理的,最为常见的就是警告一个函数没有定义,编译器没有办法找到这个函数实体位置,所以如果你连这个警告都不处理的话,那么你的程序肯定是运行不正常的。
在这里插入图片描述
所以一定要将警告和错误放在同等位置上才行。
其实很多警告都是可以消去的,编译器不会无缘无故的给你警告,你只要按照提示信息做相应的处理即可,碰到陌生的警告信息,复制粘贴到网上搜就行了,基本上都能得到解决方法的。
还有如果你不清楚你的文件是否识别一个宏定义,也可以通过这种方法提示,比如你想知道这个文件是否识别DEBUG这个宏呢(因为有些宏可能是对整个工程有效的,或者是包含了某个头文件导致它能够识别这个宏,所以不好确定),就可以采用这种方式进行提示。这只是一个应用例子,关于它们的更多应用就需要靠自己去发现了。

欢迎关注微信公众号:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值