如何优雅的屏蔽别人的警告

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

[[385122]]

本文转载自微信公众号「鱼鹰谈单片机」,作者鱼鹰Osprey。转载本文请联系鱼鹰谈单片机公众号。

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

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

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

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

 

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

函数没有声明:

 

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

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

 

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

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

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

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

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

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

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

 

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

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

 

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

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

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

打开配置选项

 

选择 C/C++ 选项卡

 

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

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

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

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

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


 

 

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

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

 

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

 

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

 

责任编辑:武晓燕 来源: 鱼鹰谈单片机
相关推荐

2013-04-03 13:43:22

iOS开发Xcode屏蔽源文件编

2023-09-14 07:46:52

2022-12-12 08:14:47

2015-11-26 10:53:45

LinuxWindowsMac OS

2017-07-26 11:32:50

NETRabbitMQ系统集成

2021-01-19 10:35:49

JVM场景函数

2020-10-16 11:48:06

服务器系统运维

2023-05-09 11:59:19

综合布线电缆

2020-08-26 07:17:19

通信

2023-10-19 19:42:25

IstioPodkubernetes

2023-10-10 13:23:18

空指针异常Java

2022-09-09 15:17:02

CentOS 7Linux

2018-06-24 09:27:55

线程Tomcat多线程

2022-04-11 08:17:07

JVMJava进程

2021-11-15 06:56:45

系统运行空指针

2023-06-16 09:08:39

ReactContextRFC

2022-02-18 17:34:47

数组多维五维数组

2023-02-21 15:19:25

JavaScriptypeof数据类型

2021-03-28 09:17:18

JVM场景钩子函数

2019-01-21 09:28:32

版本命令程序员
点赞
收藏

51CTO技术栈公众号