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).
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 asAs its name indicates, P99 is only building on C99 features for that.
Note that if this were possible in C99, then it would be possible to simulate
##__VA_ARGS__
, like so:Then any instance of
, ##__VA_ARGS__
could be replaced byPREPEND_COMMA_IF_NONEMPTY(__VA_ARGS__)
.