Llegué al punto en el que necesito comparar los valores con y sin signo. Hasta ahora, siempre modifiqué el código base para evitar esta situación por completo, pero ahora no puedo hacer eso.Manejando adecuadamente la comparación de los valores con signo y sin signo
Entonces, ¿cuál es la forma más adecuada de manejar la comparación chamuscada y sin firmar? Esta es una base de código mixto C/C++, por lo que mi pregunta se aplica a ambos idiomas.
Estoy revisando un recurso (firmado) contra el valor solicitado (sin firmar).
if (requested > resource.max) return Never;
if (requested > resource.free - resource.assigned) return NotNow;
return Now;
Estaba pensando en algo como esto (sustituto C++ variantes en su caso):
if (requested > (unsigned)INT_MAX) bail_out(); // assert,abort,throw,return....
if ((signed)requested > resource.max) return Never;
if ((signed)requested > resource.free - resource.assigned) return NotNow;
return Now;
¿estoy acercando a esto correctamente, o hay alguna manera mejor?
¿Por qué se firmó su cuenta de recursos en primer lugar? –
¿Qué tal 'resource.free
O por qué se solicita sin firmar ya que ese es el valor que el OP parece tratar como firmado. De todos modos, este enfoque me parece bien. Este tipo de cosas es tan tedioso que tiendo a evitar los tipos sin firmar por completo. – jahhaj