当前位置: 首页 > 科技观察

如何优雅屏蔽他人警告

时间:2023-03-15 13:27:11 科技观察

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