其实大多数的C语言工程师是不调Warning的,但是如果你和我一样是一个贱婊子,不调手难受,不调心痒痒,不调戏一下Warning就睡不好觉。那么告诉你一个Warning的调戏经验。
首先在调戏Warning之前,咱先得把Error这位爷请走。也就是说先调Error。把所有的Error都撂倒之后呢,也不保证程序就没错了不是。还有一些不报Error的bug。虽然bug不影响咱们调戏Warning。但是爷要调戏小娘子的时候,有外人看着怎么会尽兴。
当然了bug往往是修补不干净的(用タカキさん的话说“中国有句古话叫鸡蛋里挑骨头”)那么个别不影响正常程序使用的贱bug就让他观摩吧。
某些新人程序员如果不知道怎么把Error这位爷请走,那么我也说一下吧。
Error一般是由于语法错误引起的。常见的错误一般是拼写错误(太着急调戏小娘子,大哥你也不能按那么快啊),还有就是没打分号或者分号打成逗号,当然也有某些“处男”还会中文标点的问题报错。
当然我们也经常遭遇一些奇怪的Error,这类爷本来就是找茬儿来的。看看有没有中文路径的问题,有的Error甚至是重新打开编译器就能好。实在不行 百度,谷歌,必应,等等等。(谷歌似乎还是需要翻*qiang,我习惯使bing必应,个人有个人的习惯,的确很多人在用谷歌。推荐初学者使用百度,初学者常见Error在百度都被人答烂了。毕竟谷歌现在好像还是要翻*qiang的,我这种贱人就不喜欢翻*qiang)
那么各位爷,开始解皮带吧。
先调戏能删的。有的时候声明了变量或者函数然后一直没用。这是一种常见的Warning婊,我的经验是删之。即使有的变量是明知后续升级时会用到的东西。如果没有完全确定必要预留,那么下版的事儿下版再说。当然了如果声明的函数是已经写好了但是没有用的,可以收集起来,留着以后用,但是要是和这个程序没关系还是删掉的好。虽然我一般的做法是只删多声明的变量不删多声明的函数。
返回值没有变量接受,某些非空函数的返回值几乎无意义,成功返回1失败返回0什么的。这种返回值如果套在分支里可能还有点儿用。其实人家本来写那个函数就是方便打入分支的。那么既然没在分支里面。这个值也没啥大用的话,这种小婊砸就打入冷宫吧。假装没看见。
调用了某头文件的函数但是没有把头文件包括进来。
比如: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小娘子,我回家和夫君去做羞羞的事情了。