2011-12-09 5 views
2

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

В gcc, что может быть достигнуто путем добавления «##» после запятой, например. ,##____VA_ARGS____ как ответ в Variadic macros with zero arguments.

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

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

Спасибо!

+0

Вставьте пробел между и ##? – DipSwitch

+0

DipSwitch: Спасибо, но у меня такая же проблема. – Gnubie

ответ

2

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

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

+0

Спасибо, хотя это кажется довольно трудолюбивым. Есть ли другой способ сделать это? – Gnubie

+0

не знаю, что знаю –