符号付きと符号なしの値を比較する必要があるところまで来ました。今までは、この状況を完全に回避するためにコード ベースを修正していましたが、今はそれができません。
それでは、署名されたものと署名されていないものを比較するための本当に適切な方法は何ですか? これは混合 C/C++ コード ベースであるため、私の質問は両方の言語に適用されます。
要求された値 (署名なし) に対してリソース (署名済み) をチェックしています。
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;
私はこれに正しく取り組んでいますか、それとももっと良い方法がありますか?