gpt4 book ai didi

c - 检测有符号与无符号比较错误

转载 作者:太空狗 更新时间:2023-10-29 16:10:15 24 4
gpt4 key购买 nike

我在使用的某些代码中发现了一个问题,我担心它可能是代码库中多个区域的问题。该问题与有符号/无符号比较有关:

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 都没有说什么。

最佳答案

您可以将-Wsign-compare-Wsign-conversion一起使用。

当您将有符号值与无符号值进行比较时,第一个警告您。后者会警告您有关从无符号到有符号以及从有符号到无符号的隐式转换。

在你的情况下 -Wsign-compare 不会因为整数提升而做任何事情,而 -Wsign-conversion 会警告 s16 = 中的隐式转换u16.

关于c - 检测有符号与无符号比较错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49657202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com