¿Cómo verificar el desbordamiento de enteros firmados en C sin un comportamiento indefinido?

Hay (1):

// assume x,y are non-negative
if(x > max - y) error;

Y 2):

// assume x,y are non-negative
int sum = x + y;
if(sum < x || sum < y) error;

Cuál es el preferido o hay una mejor manera.

Respuestas a la pregunta(3)

Su respuesta a la pregunta