新闻  |   论坛  |   博客  |   在线研讨会
如何优雅的屏蔽别人的警告
鱼鹰谈单片机 | 2021-03-04 11:54:37    阅读:1330   发布文章

或许刚入门的小菜鸟都会被学长告知,警告不用管,没有错误就行!

正是这一句话,导致很多初学者都不会注意警告问题。

鱼鹰当时也是这样被教育的,但没听。

无它,既然编译器报出了警告,那就说明有不合理的地方,肯定可以想办法解决的。所以,不管是警告还是错误,鱼鹰都会一个个上网寻找解决方案,因此,鱼鹰的工程基本都是 0 警告,0错误(当然 0 错误是必须的,不然无法生成目标文件)。

最常见的警告是有个函数没有声明,或者有个变量声明了没有使用,这里介绍一种快速解决该警告的方法:

函数没有声明:

1.png

这样,只要在使用前声明即可(C99模式)。虽然不是很规范,但这是最快解决该类警告的方式,比每次编译跳出一堆警告好得多了。

变量没有使用,一般是打印需要或者调试需要,定义了变量,没有使用或者仅仅是赋值,没有读取该变量的操作,此时可以采用如下方式解决:

2.png

这两种警告确实无伤大雅,但有些警告如果你不关注的话,程序运行异常是很正常的事情(比如函数没有定义),所以鱼鹰的建议是 0 警告,这样,每次编译跳出警告时,你都可以快速定位这个是不是自己新改代码的警告,同时可以发现自己代码隐藏的问题。

那么,如果别人实在是不愿意处理警告又该如何呢?

在稍大一些的项目,一般都是由多人合作开发的,如果同事上传的代码存在警告,而他又一直没有处理,同时你自己又不能随便修改别人的代码。

你在开发时,每次跳出一个警告,你都要看一下这个警告是不是自己代码产生的(强迫症),而代码修改、编译是常有的事情,这样势必影响自己的开发进度。

还有一种情况是,使用别人的开源代码,这个源代码可能是很久以前写的,以前编译器可以通过这种写法,到现在的编译器可能就无法通过了,但同时你测试发现,这些警告不会影响功能。

那么是否可以屏蔽这些文件的警告呢?

有些人在工程里面直接屏蔽了所有警告:

3.png

这对于其他需要警告来保证开发效率的人来说,这就是灾难,因为前面鱼鹰说过,一些警告不可忽视。

还有一种稍好一些的是屏蔽部分特定警告:

4.png

但是这些配置都会对整个工程产生作用,是否有一种更好的方法,只屏蔽部分文件,其他文件的警告不受影响呢?

事实上,MDK软件已经提供了这个功能。前面提到的那种对整个工程设置的方式是最常用的,接下来还有两种不是很常用的:

1、对某个文件关闭警告:

打开配置选项

5.png

选择 C/C++ 选项卡

6.png

此时,你可以看到熟悉的配置选项,按照需要配置即可。

并且这些配置只针对一个文件有效果,对其他文件不起作用。

2、对某个文件夹关闭警告:

MDK 使用了虚拟文件夹,虽然不存在于实际文件系统中,但方便我们管理工程文件,同时也给了我们配置该文件夹的可能。

这样,如果有太多文件需要关闭警告,我们可以将其整合在一块,一次性关闭这些文件的警告(比如将有警告的开源代码放一起)。

7.png8.png

当然,我们也可以据此来关闭某些特定警告,而不必将所有警告都关闭了,方法和对整个工程配置那里类似。

除此之外,我们还可以通过在代码中添加特定内容来达到消除警告的目的,比如(一般这种代码如果没有使用的话,将产生警告,只能屏蔽它):

9.png

或者明确指定该代码不应该发出某种警告。

因为这些内容鱼鹰也用的不是很多,就不再细说。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客