类型转换bug

int a = -10;
unsigned int b = 5;

if (a > b) {
printf(“big\n”):
} else {
printf(“small\n”);
}

有经验的人一看上面的代码,就知道有问题,“>”会让int型降为unsigned int,结果会是打印出“big”,因为-10转成unsigned int肯定比5大多了。

虽然是个小bug,却是第一次撞上,因为我以前如果拿变量做计数,通常是给size_t类型,所以还真不容易遇到。查了一下gcc的文档,想要针对这种情况报warning,必须加一个编译选项:
-Wsign-compare
也可以用
-Wextra
但是-Wextra报错就会特别多,连main函数里的argc和argv没有被用到也会报出来,嗯,适合重口味的开发者。

相关文章

分类

4 Comments

QVOD电影 said:

楼主写的是什么程序

DongHao Author Profile Page said:

两台机器间收发不定长消息

ghxandsky said:

怎么我试了一下打开编译选项-Wsign-compare不行.

DongHao Author Profile Page said:

难道是gcc的版本不同?我这里 gcc-4.1.2 是可以的

留言:

关于文章

This page contains a single entry by DongHao published on 12 24, 2010 4:39 PM.

弱智bug又两个 was the previous entry in this blog.

2010年读书 is the next entry in this blog.

Find recent content on the main index or look in the 存档 to find all content.