At least as the question was originally asked, the two aren't equivalent.
In the first, something_a
is executed only if a
is true or if b
is false and c
is true. I.e., if (a || (c && !b))
.
In the second, something_a
is performed if either a
or c
is true (regardless of b
). Only if those are both false do we consider b
.
As such, your first question shouldn't be which is easier to maintain, but which behavior you actually want.
If the conditions are exclusive, so that difference doesn't arise, then I'd consider the relationship between the conditions, if any. If it's basically coincidence that two inputs happen to produce the same output, then I'd probably list each individual, since it's probably easier to simply map from inputs to results when each is listed directly. The second becomes interesting primarily when/if there's a fairly obvious relationship between the conditions.
For example, if you had something like:
if (customer has no ID || customer's age < minimum)
reject order for alcoholic beverage
In this case, we have two different manifestations of what's really a single condition: the customer can't prove they're old enough to buy the drink. They're not (from our perspective) two unrelated conditions that happen to lead to the same result--rather, they're just different ways of expressing the same condition, so it makes more sense to group them together.