我在处理的一些代码中发现了一个问题,我担心这个问题可能存在于代码库的几个区域。这个问题与有符号/无符号比较有关:
unsigned short u16;
short s16;
u16 = 0x8000;
s16 = u16;
if (u16 > s16) {
/* This is what gets printed in GCC */
printf("u16 > s16\n");
} else if (u16 == s16) {
printf("u16 == s16\n");
} else {
printf("u16 < s16\n");
}
我理解为什么这是一个问题。您有没有可靠地定位代码库中此类问题的好方法?理想情况下,它应该出现为编译器警告或静态代码分析警告,但GCC和Coverity都没有发现任何问题。
-Wsign-compare
或-Wextra
来警告这个问题。 - 0x5453unsigned short u16; short s16; u16 = 0x8000; s16 = u16;
这正是编译器输出关于“有符号”和“无符号”变量之间相互作用的警告信息的原因。 - user3629249