最近,处理一个中间件中所有的warning,经过编译发现警告信息多如牛毛,而且这个中间件还是一个国内绝对一流的公司做的,要是一直这样下去,不知道中国的软件什么时候才能够达标啊!!!
下面对出现的警告简单的总结一下:
1、赋值类型不符,这也是最常见的;
解决办法可以强制类型转换
2、实参形参类型不一致;
解决办法可以强制类型转换。
3、隐式调用函数,连接了库,但没有连接相应的头文件;
解决办法可以用extern引入函数原型。
4、条件判断中的赋值,这个比较隐晦,一般不容易找出,下面举例说明一下;
int pre_flag = 0, cur_flag = 1;
if (pre_flag = cur_flag)
...
上面if语句看似没有什么问题,但在gcc编译的时候会报警告(warning: suggest parentheses around assignment used as truth value),
这是由于gcc编译器为了提醒程序员在条件判断中,要注意“==”和“=”的区别,即编译器会以为你错将“==”写成“=”了,于是提醒一下。
因为在c语言中,条件判断只有两个值:非真(0)和真(!0),所以上面if语句我们应该修改为if ((pre_flag = cur_flag)),总之在条件判断时,一定要谨慎。
5、上面几种的组合;
好像还处理了其他类型的warning,但一时记不起来了,有时间再补上,也希望大家把自己遇到的warning也贴上,大家共同学习,
最后,希望大家一起努力将代码写得更规范,将warning当成error处理。