类型转换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没有被用到也会报出来,嗯,适合重口味的开发者。

 

你可能感兴趣的:(gcc,文档)