That strikes me as better. The original macro presumably misbehaves if there's more than one statement in a sequence, as the if will only affect the first statement.
Both version of the macro makes this fall through from 0:
switch (a) {
brkcase 0: foo();
case 1: bar();
}
so in a sense the `if (0) case` trick also affects the previous case, not the current one. But that one also falls apart when there are multiple statements under the brkcase.