Q:

при выполнении программы с использованием хеш-функции rs возникает предупрежнеие unsigned integer overflow

хеш функция взята вот отсюда http://vak.ru/doku.php/proj/hash/sources
unsigned int RSHash (char *str, unsigned int len)
{
    unsigned int b = 378551;
    unsigned int a = 63689;
    unsigned int hash = 0;
    unsigned int i = 0;

    for (i = 0; i < len; str++, i++) {
        hash = hash * a + (unsigned char)(*str);
        a = a * b;
    }
    return hash;
}

при выполнении кода возникает ошибка
test2.c:23:24: runtime error: unsigned integer overflow: 63689 * 378551 cannot be represented in type 'unsigned int'
test2.c:22:30: runtime error: unsigned integer overflow: 72 * 2634698159 cannot be represented in type 'unsigned int'

я понимаю что из-за переполнения числа unsignet int, но если это специально заложено в программу, как тогда избежать вывода данного предупреждения? Т.к. программа не вылетает, отрабатывает. Т.е. вроде просто как предупреждение.

A:

Все вполне корректно и законно, поскольку переполнение беззнаковых чисел описано в стандарте, не влечет никакого undefined behaviour, не является implementation-defined (в отличие от знакового переполнения), так что все в коде нормально, работайте смело.

