int variadic(char*, ...); //<-prototype
variadic("foo", "bar", (char*)0); //<- usage
66) The macro NULL is defined in (and other headers) as a
null pointer constant; see 7.19.
3 An integer constant expression with the value 0, or such an
expression cast to type void *, is called a null pointer constant. 66)
If a null pointer constant is converted to a pointer type, the
resulting pointer, called a null pointer, is guaranteed to compare
unequal to a pointer to any object or function.
#define NIL (void*)0 /*<= never a plain 0*/
It's specifically allowed to access a
void* argument using
va_arg(args, char*) and vice versa, not just for the null pointer.