c warnings constants unsigned c89

No puede deshacerse de "esta constante decimal no está firmada solo en ISO C90" advertencia



warnings constants (1)

unsigned hash = 2166136261u; // note the u.

Necesita un sufijo u para indicar que este es un número sin firmar. Sin el sufijo u será un número firmado. Ya que

2166136261 > 2³¹ - 1 = INT_MAX,

Este literal entero será problemático.

Estoy utilizando el hash FNV como algoritmo de hash en mi implementación de Hash Table, pero recibo la advertencia en el título de la pregunta en esta línea:

unsigned hash = 2166136261;

No entiendo por qué sucede esto porque cuando hago esto:

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

Entiendo esto:

4294967295 2166136261

Lo que parece estar bajo los límites de mi máquina ...

¿Por qué recibo la advertencia y cuáles son mis opciones para deshacerme de ella?