Соответствующий способ обработки переменных в макросе - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь понять, как обрабатывать переменные в макросе соответствующим образом (то есть избегать запятую 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?

...