Como detectar estouro de multiplicação de números inteiros não assinados?

Eu estava escrevendo um programa em C ++ para encontrar todas as soluções deab = c, Ondea, b ec juntos, use todos os dígitos de 0 a 9 exatamente uma vez. O programa repetiu os valores dea ebe executou uma rotina de contagem de dígitos sempre quea, b eab para verificar se a condição de dígitos foi atendida.

Entretanto, soluções falsas podem ser geradas quandoab excede o limite inteiro. Acabei verificando isso usando código como:

unsigned long b, c, c_test;
...
c_test=c*b;         // Possible overflow
if (c_test/b != c) {/* There has been an overflow*/}
else c=c_test;      // No overflow

Existe uma maneira melhor de testar o estouro? Eu sei que alguns chips têm um sinalizador interno definido quando ocorre um estouro, mas nunca o vi acessado por C ou C ++.

Cuidado queassinado int estouro é comportamento indefinido em C e C ++e, portanto, você deve detectá-lo sem realmente causar. Para transbordamento int assinado antes da adição, consulteDetectando estouro assinado em C / C ++

questionAnswers(30)

yourAnswerToTheQuestion