Да, gcc глотает запятую нестандартно, и вы не должны на это полагаться.
С препроцессорами, соответствующими стандарту C99, вы можете добиться аналогичного эффекта, проверяя макропараметры, которые являются пустым токеном. Для идей того, как это работает, вы можете увидеть здесь , для целого набора макросов препроцессора, которые упрощают программирование таких функций, есть P99 .