Detect presence or absence of arguments in a C macro
c, c-preprocessor, variadic-macros
Solution
In C99 it is possible to detect if a macro argument is empty, but making that robust against all odds that may appear in that argument (arguments that are themselves expanding, contain `()` and stuff like that) is difficult. My macro package P99 implements such a thing, so you wouldn't have to worry too much. With that your macro can be implemented as
#define IFARGS(YES, NO, ...) P99_IF_EMPTY(__VA_ARGS__)(YES(__VA__ARGS__))(NO())
As its name indicates, P99 is only building on C99 features for that.
Problem
How can one define a C macro `IFARGS(YES, NO, ...)` such that invoking `IFARGS` with no additional arguments produces `NO`, and invoking `IFARGS` with one or more arguments produces `YES`? I have an answer using GCC (see below), but I'd prefer one for C99 if possible (or a proof of its impossibility).