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.