我遇到了一个我不太懂的警告。通过比较我认为是无符号的与未签名的无符号来生成警告。
以下是来源:
#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)
如何修复上述比较?
答案 0 :(得分:4)
我遇到了同样的问题,我通过使用中间变量解决了这个问题:
uint8_t check = ~arr[2];
if (arr[3] != check)
答案 1 :(得分:3)