Я пытаюсь понять, как обрабатывать переменные в макросе соответствующим образом (то есть избегать запятую gcc
##__VA_ARGS__
). Я написал это:
#define IS_DEFINED(ARG) strlen(#ARG)
#define FOO(a, ...) \
if(IS_DEFINED(__VA_ARGS__)){\
printf(#a, __VA_ARGS__)\
} else {\
printf(#a)\
}
Но он не генерирует действительный тест программы. FOO(1)
расширяется до
if(strlen("")){ printf("1", ) } else { printf("1") };
, который не компилируется.
Есть ли способ обработать случай макрофункции vararg с одним параметром и vararg?