首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测有符号和无符号比较错误

检测有符号和无符号比较错误
EN

Stack Overflow用户
提问于 2018-04-04 17:39:51
回答 1查看 439关注 0票数 3

我在我正在处理的一些代码中发现了一个问题,我担心这可能是代码库中的几个方面的问题。这个问题与签名/无符号比较有关:

代码语言:javascript
复制
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都没有说任何话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 17:47:30

您可以将-Wsign-compare-Wsign-conversion结合使用。

当您比较有符号值和无符号值时,第一个值会警告您。后者警告您隐式转换从未签名到签名和从签名到未签名。

在您的示例中,由于整数提升,-Wsign-compare不会做任何事情,而-Wsign-conversion将警告s16 = u16中的隐式转换。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49657202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档