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

はい、バグだと思います。[バグ c/ 38341 ] 昇格した ~unsigned と unsigned の間違った警告比較と、なぜ、警告: 符号付き整数式と符号なし整数式の比較? を参照してください。. これはあなたを助けるかもしれません。

于 2013-08-26T15:19:21.453 に答える