There is no one right answer to this question. There are several possible answers, depending on what you know a priori about the values that those variables may take on.
If you know that
sst
is non-negative, then you can safely castsst
tosize_t
, as this will not change the value (incidentally, this is what happens if you have no cast at all).If
sst
might be negative but you know thatst
will never be larger thanSSIZE_MAX
, then you can safely castst
tossize_t
, as this will not change the value.If
sst
might be negative, andst
might be larger thanSSIZE_MAX
, then neither cast is correct; either one could change the value, resulting in an incorrect comparison. Instead, you would do the followingif (sst >= 0 && (size_t)sst == st)
.
If you’re not absolutely certain that one of the first two situations applies, choose the third option as it is correct in all cases.