我在我正在处理的一些代码中发现了一个问题,我担心这可能是代码库中的几个方面的问题。这个问题与签名/无符号比较有关:
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");
}我理解why this is an issue。在你的代码库中有可靠定位这类问题的好方法吗?理想情况下,它会显示为编译器警告或静态代码分析警告,但GCC和Coverity都没有说任何话。
发布于 2018-04-04 17:47:30
您可以将-Wsign-compare与-Wsign-conversion结合使用。
当您比较有符号值和无符号值时,第一个值会警告您。后者警告您隐式转换从未签名到签名和从签名到未签名。
在您的示例中,由于整数提升,-Wsign-compare不会做任何事情,而-Wsign-conversion将警告s16 = u16中的隐式转换。
https://stackoverflow.com/questions/49657202
复制相似问题