7

我遇到了一个我不太明白的警告。通过将我认为是一个未签名的内容与另一个未签名的内容进行比较来生成警告。

这是来源:

#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>

int main()
{
    uint8_t *arr = malloc(8);
    assert(arr);

    /* fill arr[] with stuff */

    if (arr[3] != (uint8_t)(~arr[2])) { // Warning is here
        /* stuff */
    }
    return EXIT_SUCCESS;
}

我使用以下过程构建:

user@linux:~ $ gcc -o test -Wall -Wextra test.c 
test.c: In function ‘main’:
test.c:13:16: warning: comparison of promoted ~unsigned with unsigned [-Wsign-compare]

我正在使用 gcc 版本 4.7.2 20121109 (Red Hat 4.7.2-8)

如何解决上述比较?

4

2 回答 2

7

我遇到了同样的问题,我通过使用中间变量来解决它:

uint8_t check = ~arr[2];
if (arr[3] != check)
于 2015-12-01T17:22:16.460 回答
4

是的,我认为它是一个错误。阅读[Bug c/38341] 提升 ~unsigned 与 unsigned 的错误警告比较以及为什么,警告:有符号和无符号整数表达式之间的比较?. 这可能会帮助你。

于 2013-08-26T15:19:21.453 回答