Глотание запятой в вариационных макросах на компиляторах, которые не распознают ## - PullRequest
3 голосов
/ 09 декабря 2011

Мне нужно написать переменный макрос в C, который должен принимать ноль или более аргументов.

В gcc это может быть достигнуто путем добавления "##" после запятой, например, ,##____VA_ARGS____ в ответе Макросы Variadic с нулевыми аргументами .

Однако компилятор в моей системе сборки (вне моего контроля) не понимает синтаксис ,## и поэтому не глотает запятую.

Есть ли обходной путь, который я могу использовать?

Спасибо!

1 Ответ

4 голосов
/ 09 декабря 2011

Да, gcc глотает запятую нестандартно, и вы не должны на это полагаться.

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

...