Правильная обработка сравнения значений со знаком и без знака

Я дошел до того, что мне нужно сравнить опаленные и неподписанные значения. До сих пор я всегда модифицировал кодовую базу, чтобы полностью избежать этой ситуации, но теперь я не могу этого сделать.

Так как же правильно обрабатывать опаленные и неподписанные сравнения? Это смешанная кодовая база C/C++, поэтому мой вопрос относится к обоим языкам.

Я проверяю ресурс (signed )по запрошенному значению (unsigned ).

if (requested > resource.max) return Never;
if (requested > resource.free - resource.assigned) return NotNow;
return Now;

Я думал о чем-то вроде этого (замените варианты C++, где это применимо):

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;

Правильно ли я подхожу к этому, или есть лучший способ?

9
задан EvilTeach 30 July 2013 в 01:32
поделиться