如何優雅的屏蔽別人的警告
本文轉載自微信公眾號「魚鷹談單片機」,作者魚鷹Osprey。轉載本文請聯系魚鷹談單片機公眾號。
或許剛入門的小菜鳥都會被學長告知,警告不用管,沒有錯誤就行!
正是這一句話,導致很多初學者都不會注意警告問題。
魚鷹當時也是這樣被教育的,但沒聽。
無它,既然編譯器報出了警告,那就說明有不合理的地方,肯定可以想辦法解決的。所以,不管是警告還是錯誤,魚鷹都會一個個上網尋找解決方案,因此,魚鷹的工程基本都是 0 警告,0錯誤(當然 0 錯誤是必須的,不然無法生成目標文件)。
最常見的警告是有個函數沒有聲明,或者有個變量聲明了沒有使用,這里介紹一種快速解決該警告的方法:
函數沒有聲明:
這樣,只要在使用前聲明即可(C99模式)。雖然不是很規范,但這是最快解決該類警告的方式,比每次編譯跳出一堆警告好得多了。
變量沒有使用,一般是打印需要或者調試需要,定義了變量,沒有使用或者僅僅是賦值,沒有讀取該變量的操作,此時可以采用如下方式解決:
這兩種警告確實無傷大雅,但有些警告如果你不關注的話,程序運行異常是很正常的事情(比如函數沒有定義),所以魚鷹的建議是 0 警告,這樣,每次編譯跳出警告時,你都可以快速定位這個是不是自己新改代碼的警告,同時可以發現自己代碼隱藏的問題。
那么,如果別人實在是不愿意處理警告又該如何呢?
在稍大一些的項目,一般都是由多人合作開發的,如果同事上傳的代碼存在警告,而他又一直沒有處理,同時你自己又不能隨便修改別人的代碼。
你在開發時,每次跳出一個警告,你都要看一下這個警告是不是自己代碼產生的(強迫癥),而代碼修改、編譯是常有的事情,這樣勢必影響自己的開發進度。
還有一種情況是,使用別人的開源代碼,這個源代碼可能是很久以前寫的,以前編譯器可以通過這種寫法,到現在的編譯器可能就無法通過了,但同時你測試發現,這些警告不會影響功能。
那么是否可以屏蔽這些文件的警告呢?
有些人在工程里面直接屏蔽了所有警告:
這對于其他需要警告來保證開發效率的人來說,這就是災難,因為前面魚鷹說過,一些警告不可忽視。
還有一種稍好一些的是屏蔽部分特定警告:
但是這些配置都會對整個工程產生作用,是否有一種更好的方法,只屏蔽部分文件,其他文件的警告不受影響呢?
事實上,MDK軟件已經提供了這個功能。前面提到的那種對整個工程設置的方式是最常用的,接下來還有兩種不是很常用的:
1、對某個文件關閉警告:
打開配置選項
選擇 C/C++ 選項卡
此時,你可以看到熟悉的配置選項,按照需要配置即可。
并且這些配置只針對一個文件有效果,對其他文件不起作用。
2、對某個文件夾關閉警告:
MDK 使用了虛擬文件夾,雖然不存在于實際文件系統中,但方便我們管理工程文件,同時也給了我們配置該文件夾的可能。
這樣,如果有太多文件需要關閉警告,我們可以將其整合在一塊,一次性關閉這些文件的警告(比如將有警告的開源代碼放一起)。
當然,我們也可以據此來關閉某些特定警告,而不必將所有警告都關閉了,方法和對整個工程配置那里類似。
除此之外,我們還可以通過在代碼中添加特定內容來達到消除警告的目的,比如(一般這種代碼如果沒有使用的話,將產生警告,只能屏蔽它):
或者明確指定該代碼不應該發出某種警告。
因為這些內容魚鷹也用的不是很多,就不再細說。