Не удается избавиться от предупреждения «эта десятичная константа не подписана только в ISO C90» - PullRequest
28 голосов
/ 27 февраля 2010

Я использую хэш FNV в качестве алгоритма хэширования в моей реализации хэш-таблицы, но в заголовке вопроса в этой строке выдается предупреждение:

unsigned hash = 2166136261;

Я не понимаю, почему это происходит, потому что, когда я делаю это:

printf("%u\n", UINT_MAX);
printf("2166136261\n");

Я понял:

4294967295
2166136261

Что, кажется, находится за пределами моей машины ...

Почему я получаю предупреждение и какие у меня есть варианты, чтобы от него избавиться?

1 Ответ

42 голосов
/ 27 февраля 2010
unsigned hash = 2166136261u; // note the u.

Вам нужен суффикс u, чтобы указать, что это число без знака. Без суффикса u это будет номер со знаком. Так как

2166136261 > 2³¹ - 1 = INT_MAX,

этот целочисленный литерал будет проблематичным.

...