Variadic macro extensions
Variadic macro extensions refer to two extensions to C99 and Standard
C++ related to macros with variable number of arguments. One extension
is a mechanism for renaming the variable argument identifier from __VA_ARGS__ to
a user-defined identifier. The other extension provides a way to remove
the dangling comma in a variadic macro when no variable arguments
are specified.
__VA_ARGS__. The first definition of the
macro debug exemplifies the usual usage of __VA_ARGS__.
The second definition shows the use of the identifier args in
place of __VA_ARGS__. #define debug1(format, …) printf(format, ## __VA_ARGS__)
#define debug2(format, args …) printf(format, ## args)
| Invocation | Result of macro expansion |
|---|---|
debug1("Hello %s\n","World"); |
printf("Hello %s\n","World"); |
debug2("Hello %s\n","World"); |
printf("Hello %s\n","World"); |
The preprocessor removes the trailing comma if the variable arguments
to a function macro are omitted or empty and the comma followed by ## precedes
the variable argument identifier in the function macro definition.
Beginning of C++0x only.
In C++0x, the variadic macros feature and changes concerning empty macro arguments are adopted from the C99 preprocessor to provide a common preprocessor interface for C and C++ compilers. Variadic macros and empty macro arguments are supported in C++0x. For more information, see C99 preprocessor features adopted in C++0x.
End of C++0x only.