今天又開始手賤,調(diào)戲起來(lái)Warning。
其實(shí)大多數(shù)的C語(yǔ)言工程師是不調(diào)Warning的,但是如果你和我一樣是一個(gè)賤婊子,不調(diào)手難受,不調(diào)心癢癢,不調(diào)戲一下Warning就睡不好覺。那么告訴你一個(gè)Warning的調(diào)戲經(jīng)驗(yàn)。
首先在調(diào)戲Warning之前,咱先得把Error這位爺請(qǐng)走。也就是說先調(diào)Error。把所有的Error都撂倒之后呢,也不保證程序就沒錯(cuò)了不是。還有一些不報(bào)Error的bug。雖然bug不影響咱們調(diào)戲Warning。但是爺要調(diào)戲小娘子的時(shí)候,有外人看著怎么會(huì)盡興。
當(dāng)然了bug往往是修補(bǔ)不干凈的(用タカキさん的話說“中國(guó)有句古話叫雞蛋里挑骨頭”)那么個(gè)別不影響正常程序使用的賤bug就讓他觀摩吧。
某些新人程序員如果不知道怎么把Error這位爺請(qǐng)走,那么我也說一下吧。
Error一般是由于語(yǔ)法錯(cuò)誤引起的。常見的錯(cuò)誤一般是拼寫錯(cuò)誤(太著急調(diào)戲小娘子,大哥你也不能按那么快啊),還有就是沒打分號(hào)或者分號(hào)打成逗號(hào),當(dāng)然也有某些“處男”還會(huì)中文標(biāo)點(diǎn)的問題報(bào)錯(cuò)。
當(dāng)然我們也經(jīng)常遭遇一些奇怪的Error,這類爺本來(lái)就是找茬兒來(lái)的。看看有沒有中文路徑的問題,有的Error甚至是重新打開編譯器就能好。實(shí)在不行 百度,谷歌,必應(yīng),等等等。(谷歌似乎還是需要翻*qiang,我習(xí)慣使bing必應(yīng),個(gè)人有個(gè)人的習(xí)慣,的確很多人在用谷歌。推薦初學(xué)者使用百度,初學(xué)者常見Error在百度都被人答爛了。畢竟谷歌現(xiàn)在好像還是要翻*qiang的,我這種賤人就不喜歡翻*qiang)
那么各位爺,開始解皮帶吧。
先調(diào)戲能刪的。有的時(shí)候聲明了變量或者函數(shù)然后一直沒用。這是一種常見的Warning婊,我的經(jīng)驗(yàn)是刪之。即使有的變量是明知后續(xù)升級(jí)時(shí)會(huì)用到的東西。如果沒有完全確定必要預(yù)留,那么下版的事兒下版再說。當(dāng)然了如果聲明的函數(shù)是已經(jīng)寫好了但是沒有用的,可以收集起來(lái),留著以后用,但是要是和這個(gè)程序沒關(guān)系還是刪掉的好。雖然我一般的做法是只刪多聲明的變量不刪多聲明的函數(shù)。
返回值沒有變量接受,某些非空函數(shù)的返回值幾乎無(wú)意義,成功返回1失敗返回0什么的。這種返回值如果套在分支里可能還有點(diǎn)兒用。其實(shí)人家本來(lái)寫那個(gè)函數(shù)就是方便打入分支的。那么既然沒在分支里面。這個(gè)值也沒啥大用的話,這種小婊砸就打入冷宮吧。假裝沒看見。
調(diào)用了某頭文件的函數(shù)但是沒有把頭文件包括進(jìn)來(lái)。
比如:warning: type mismatch with previous implicit declaration
implicit declaration of function '***'
這種把頭文件包括進(jìn)來(lái)就行了。
列表和調(diào)用不對(duì)應(yīng)too few arguments for format
比如:printf("%4d %4d",a);
這樣要么就補(bǔ)一個(gè),剛才是不是覺得有個(gè)值老是顯示不出來(lái),還以為是bug呢吧。嘿嘿
當(dāng)然了,也有某些仁兄是手抖多打了一個(gè),那刪唄。
邏輯運(yùn)算符 或/且 不知道式子兩邊的范圍。
我的習(xí)慣是把或和且的兩邊都帶上括號(hào),所以我很少遇到這個(gè)warning,畢竟遇到這個(gè)還有分析當(dāng)時(shí)的邏輯關(guān)系,挺耽誤時(shí)間的,不如之前就養(yǎng)成好習(xí)慣。當(dāng)然您要是非要留著玩兒解悶兒,我不也沒辦法嗎。那您就趕緊關(guān)起門來(lái)和您的warning小娘子過二人世界吧。
運(yùn)算對(duì)值沒意義
比如您是這樣聲明的 int *p;
然后您這樣*p++;
我覺得您的意思是不是(*p)=(*p)+1;
您自己再看看您當(dāng)時(shí)想表達(dá)啥。
redefined,這個(gè)是聲明多次的意思。那就聲明一次好咯,用 #ifndef 就能巧妙的避免這種情況。
if的分支或者while的循環(huán)不可能被執(zhí)行到,您定義個(gè)unsigned然后一個(gè)if判斷他是不是負(fù)數(shù)。該刪就刪吧。
還有一種warning是參數(shù)類型不一致,加強(qiáng)制類型轉(zhuǎn)化唄。
無(wú)論您如何調(diào)戲,您最好改一步就重新編譯運(yùn)行一次。原則是調(diào)戲Warning的過程中不能產(chǎn)生Error或者新的bug。
祝各位單身的爺順利勾引到warning小娘子,我回家和夫君去做羞羞的事情了。
新聞熱點(diǎn)
疑難解答