今天又開始手賤,調戲起來Warning。
程序員
其實大多數的C語言工程師是不調Warning的,可是若是你和我同樣是一個賤婊子,不調手難受,不調心癢癢,不調戲一下Warning就睡很差覺。那麼告訴你一個Warning的調戲經驗。
函數
首先在調戲Warning以前,咱先得把Error這位爺請走。也就是說先調Error。把全部的Error都撂倒以後呢,也不保證程序就沒錯了不是。還有一些不報Error的bug。雖然bug不影響我們調戲Warning。可是爺要調戲小娘子的時候,有外人看着怎麼會盡興。orm
固然了bug每每是修補不乾淨的(用タカキさん的話說「中國有句古話叫雞蛋裏挑骨頭」)那麼個別不影響正常程序使用的賤bug就讓他觀摩吧。ci
某些新人程序員若是不知道怎麼把Error這位爺請走,那麼我也說一下吧。編譯器
Error通常是因爲語法錯誤引發的。常見的錯誤通常是拼寫錯誤(太着急調戲小娘子,大哥你也不能按那麼快啊),還有就是沒打分號或者分號打成逗號,固然也有某些「處男」還會中文標點的問題報錯。it
固然咱們也常常遭遇一些奇怪的Error,這類爺原本就是找茬兒來的。看看有沒有中文路徑的問題,有的Error甚至是從新打開編譯器就能好。實在不行 百度,谷歌,必應,等等等。(谷歌彷佛仍是須要翻*qiang,我習慣使bing必應,我的有我的的習慣,的確不少人在用谷歌。推薦初學者使用百度,初學者常見Error在百度都被人答爛了。畢竟谷歌如今好像仍是要翻*qiang的,我這種賤人就不喜歡翻*qiang)
io
那麼各位爺,開始解皮帶吧。編譯
先調戲能刪的。有的時候聲明瞭變量或者函數而後一直沒用。這是一種常見的Warning婊,個人經驗是刪之。即便有的變量是明知後續升級時會用到的東西。若是沒有徹底肯定必要預留,那麼下版的事兒下版再說。固然了若是聲明的函數是已經寫好了可是沒有用的,能夠收集起來,留着之後用,可是要是和這個程序不要緊仍是刪掉的好。雖然我通常的作法是隻刪多聲明的變量不刪多聲明的函數。function
返回值沒有變量接受,某些非空函數的返回值幾乎無心義,成功返回1失敗返回0什麼的。這種返回值若是套在分支裏可能還有點兒用。其實人家原本寫那個函數就是方便打入分支的。那麼既然沒在分支裏面。這個值也沒啥大用的話,這種小婊砸就打入冷宮吧。僞裝沒看見。form
調用了某頭文件的函數可是沒有把頭文件包括進來。
好比:warning: type mismatch with previous implicit declaration
implicit declaration of function '***'
這種把頭文件包括進來就好了。
列表和調用不對應too few arguments for format
好比:printf("%4d %4d",a);
這樣要麼就補一個,剛纔是否是以爲有個值總是顯示不出來,還覺得是bug呢吧。嘿嘿
固然了,也有某些仁兄是手抖多打了一個,那刪唄。
邏輯運算符 或/且 不知道式子兩邊的範圍。
個人習慣是把或和且的兩邊都帶上括號,因此我不多遇到這個warning,畢竟遇到這個還有分析當時的邏輯關係,挺耽誤時間的,不如以前就養成好習慣。固然您要是非要留着玩兒解悶兒,我不也沒辦法嗎。那您就趕忙關起門來和您的warning小娘子過二人世界吧。
運算對值沒意義
好比您是這樣聲明的 int *p;
而後您這樣*p++;
我以爲您的意思是否是(*p)=(*p)+1;
您本身再看看您當時想表達啥。
redefined,這個是聲明屢次的意思。那就聲明一次好咯,用 #ifndef 就能巧妙的避免這種狀況。
if的分支或者while的循環不可能被執行到,您定義個unsigned而後一個if判斷他是否是負數。該刪就刪吧。
還有一種warning是參數類型不一致,增強制類型轉化唄。
不管您如何調戲,您最好改一步就從新編譯運行一次。原則是調戲Warning的過程當中不能產生Error或者新的bug。
祝各位單身的爺順利勾引到warning小娘子,我回家和夫君去作羞羞的事情了。