免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 39180 | 回复: 5
打印 上一主题 下一主题

你会改掉所有Warning么? [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
1 [报告]
发表于 2009-12-03 23:53 |显示全部楼层
会。
代码是我写的,我比任何人都更熟悉代码,以及某个warning是否真的是噪音。
所以有义务保持0 warning。以免使用代码的人对某个warning拿捏不定。

第2个原因么……   warning少的时候才有动力去改,累积多了的话……
100个、200个还是1000个,都关系不大了……
所以出现warning,立马干掉……

也是为了避免自己的代码,给别人添加不必要的warning,使得别人很容易就突破那个转折点……


但是……   一些静态检查工具……   就比较……
毕竟是死板的程序与机器……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
2 [报告]
发表于 2009-12-04 01:51 |显示全部楼层
原帖由 maxxfire 于 2009-12-4 01:25 发表
会。。

不过上次遇到一个无法去除的warning,非常奇怪:

    unsigned char *s = "abc";
    unsigned char *p = s;

    if( *p=='\210' )   
        printf("OK");

warning: comparison is always false due to limited range of data type
gcc版本3.4.6


gcc -funsigned-char -Wall  ...

if ( *p == (unsigned char)'\210' ) ...

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
3 [报告]
发表于 2009-12-04 16:10 |显示全部楼层
原帖由 koolcoy 于 2009-12-4 10:55 发表
看情况, 有些时候做不到0 warning。
我最喜欢干这个了:
struct foo {
...
} __attribute__((packed));

static void __checkSize(char c[sizeof(foo) == bar ? 1 : -1]); //不实现这个函数
这个时候编译器就会报warning


typedef int checkSize__[ sizeof(foo)==bar? 1:-1 ] ;

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
4 [报告]
发表于 2009-12-04 17:40 |显示全部楼层

回复 #25 zx_wing 的帖子

呃……   我照着他(还是她?)写的……  没考虑太多……
你这么一说, bar应该是指代某个编译时常量吧。 比如 12什么的。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
5 [报告]
发表于 2009-12-10 08:35 |显示全部楼层
原帖由 皇家救星 于 2009-12-9 09:50 发表
看情况,例如这个

class Bigger
{
public:
        inline bool operator()(int left, int right)
        {
                return left > right;
        }
};


sort(vec_array.begin(), vec_array.end(), Bigger());

由于内联问题,编译时一堆警告,但还是得保留下来(换成函数指针就不会有警告了,但排序10000000的vector,是这种有警告的方法9倍以上)
    1500-029: (W) WARNING: subprogram std::_Push_heap<std::_Ptrit<int,long,int *,int &,int *,int &>,long,int,Bigger>(_Ptrit<int,long,int *,int &,int *,int &>, long, long, int, Bigger) could not be inlined into std::_Adjust_heap<std::_Ptrit<int,long,int *,int &,int *,int &>,long,int,Bigger>(_Ptrit<int,long,int *,int &,int *,int &>, long, long, int, Bigger).
    1500-029: (W) WARNING: subprogram std::_Adjust_heap<std::_Ptrit<int,long,int *,int &,int *,int &>,long,int,Bigger>(_Ptrit<int,long,int *,int &,int *,int &>, long, long, int, Bigger) could not be inlined into std::_Pop_heap<std::_Ptrit<int,long,int *,int &,int *,int &>,long,int,Bigger>(_Ptrit<int,long,int *,int &,int *,int &>, _Ptrit<int,long,int *,int &,int *,int &>, _Ptrit<int,long,int *,int &,int *,int &>, int, Bigger, long *).


啥编译器?  没有被内联的时候还会通知你?  这功能不错

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
6 [报告]
发表于 2009-12-10 17:57 |显示全部楼层

回复 #48 swxlion 的帖子

4996就是msvc的sb行为
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP