IMHO if (n < 0) n = 0; makes it perfectly clear that after that, `n >= 0`, so a comment explaining this would violate the DRY principle, and an assertion I would consider downright silly. I consider the variant using `goto` harder to understand than plain `if`. And your function's name does not express its intent; if you renamed it e.g. `make_non_negative`, you left no doubt about what it does. YMMV.