本文转载自微信公众号「鱼鹰谈单片机」,作者鱼鹰Osprey。转载本文请联系鱼鹰谈单片机公众号。
或许刚入门的小菜鸟都会被学长告知,警告不用管,没有错误就行!
正是这一句话,导致很多初学者都不会注意警告问题。
鱼鹰当时也是这样被教育的,但没听。
无它,既然编译器报出了警告,那就说明有不合理的地方,肯定可以想办法解决的。所以,不管是警告还是错误,鱼鹰都会一个个上网寻找解决方案,因此,鱼鹰的工程基本都是 0 警告,0错误(当然 0 错误是必须的,不然无法生成目标文件)。
最常见的警告是有个函数没有声明,或者有个变量声明了没有使用,这里介绍一种快速解决该警告的方法:
函数没有声明:
这样,只要在使用前声明即可(C99模式)。虽然不是很规范,但这是最快解决该类警告的方式,比每次编译跳出一堆警告好得多了。
变量没有使用,一般是打印需要或者调试需要,定义了变量,没有使用或者仅仅是赋值,没有读取该变量的操作,此时可以采用如下方式解决:
这两种警告确实无伤大雅,但有些警告如果你不关注的话,程序运行异常是很正常的事情(比如函数没有定义),所以鱼鹰的建议是 0 警告,这样,每次编译跳出警告时,你都可以快速定位这个是不是自己新改代码的警告,同时可以发现自己代码隐藏的问题。
那么,如果别人实在是不愿意处理警告又该如何呢?
在稍大一些的项目,一般都是由多人合作开发的,如果同事上传的代码存在警告,而他又一直没有处理,同时你自己又不能随便修改别人的代码。
你在开发时,每次跳出一个警告,你都要看一下这个警告是不是自己代码产生的(强迫症),而代码修改、编译是常有的事情,这样势必影响自己的开发进度。
还有一种情况是,使用别人的开源代码,这个源代码可能是很久以前写的,以前编译器可以通过这种写法,到现在的编译器可能就无法通过了,但同时你测试发现,这些警告不会影响功能。
那么是否可以屏蔽这些文件的警告呢?
有些人在工程里面直接屏蔽了所有警告:
这对于其他需要警告来保证开发效率的人来说,这就是灾难,因为前面鱼鹰说过,一些警告不可忽视。
还有一种稍好一些的是屏蔽部分特定警告:
但是这些配置都会对整个工程产生作用,是否有一种更好的方法,只屏蔽部分文件,其他文件的警告不受影响呢?
事实上,MDK软件已经提供了这个功能。前面提到的那种对整个工程设置的方式是最常用的,接下来还有两种不是很常用的:
1、对某个文件关闭警告:
打开配置选项
选择 C/C++ 选项卡
此时,你可以看到熟悉的配置选项,按照需要配置即可。
并且这些配置只针对一个文件有效果,对其他文件不起作用。
2、对某个文件夹关闭警告:
MDK 使用了虚拟文件夹,虽然不存在于实际文件系统中,但方便我们管理工程文件,同时也给了我们配置该文件夹的可能。
这样,如果有太多文件需要关闭警告,我们可以将其整合在一块,一次性关闭这些文件的警告(比如将有警告的开源代码放一起)。
当然,我们也可以据此来关闭某些特定警告,而不必将所有警告都关闭了,方法和对整个工程配置那里类似。
除此之外,我们还可以通过在代码中添加特定内容来达到消除警告的目的,比如(一般这种代码如果没有使用的话,将产生警告,只能屏蔽它):
或者明确指定该代码不应该发出某种警告。
因为这些内容鱼鹰也用的不是很多,就不再细说。