Bad:
void something_failable(void *data) { if (!is_valid(data)) { log_err("invalid data"); } /* ... */ }
int something_failable(xxx_t *ctx, void *data) { if (!is_valid(data)) { return xxx_err(ctx, "invalid data"); } /* ... */ }
int something_failable(xxx_t *ctx, void *data) { ASSERT(is_valid(data)); /* ... */ }
Bad:
Less bad: