Могу ли я определить макросы препроцессора C с переменным числом аргументов с __VA_ARGS в середине вместо конца?

GCC жалуется, если я сделаю это:

#define M(obj,met, ..., contents) obj##_##met(const void * self, __VA_ARGS__) { \
   contents \
   }

Дает мне две причины:

error: missing ')' in macro parameter list
warning: __VA_ARGS__ can only appear in the expansion of a C99 variadic macro

Очевидно, макросы с переменным числом аргументов в стиле C99 ожидают закрывающую скобку сразу после многоточия, фактически требуя, чтобы список переменных был последним аргументом макроса. Мне нужно, чтобы он находился посередине, чтобы создать сокращенную запись, описанную в приведенном выше макросе. Поддерживает ли GCC эту функцию с использованием другого (не C99) стиля макросов с переменным числом аргументов? Могу ли я как-нибудь подражать этому? Мне не нужен список с переменными числами в конце, это запутает мои обозначения. И я могу использовать только GCC.

6
задан Brian Tompsett - 汤莱恩 29 February 2016 в 22:21
поделиться