if (!c_assert(p >= 0) == true) { return ERROR; }
// vs
if (!c_assert(p >= 0)) { return ERROR; }
// The following makes the error condition clearer, but it goes against the convention of having a hopefully true condition as the argument to assert.
if (c_assert(p < 0)) { return ERROR; }