the fact that parameters of different and incompatibles types are passed to the println() function shows it can't be C
#define cppclone(...) cppfake(unused, __VA_ARGS__)
Hehe. I see this has sparked some kind of contest. Looks a bit like an obfuscated C contest of some kind, but that's fun.
As I said in my "edit" section, there's actually a standard way of doing this properly in C11 with the _Generic keyword. For people interested, please look it up. It can be pretty handy. (Of course, some coding rules you may be subjected to may forbid its use, just like they would generally forbid any fancy preprocessor stuff.)
In your example, meant to work with earlier versions of the C standard, there are a couple issues.
First, and this is minor (due to a quick typing from your part) is that "unused" is undefined? I get your point, such C functions would require a dummy parameter to make use of variadic parameters, but the passed parameter could be just anything. I would write this instead:
#define cppclone(...) cppfake(0, __VA_ARGS__)
then the cppfake() function could be declared like so:
xxx cppfake(int unused, ...)
The main problem with this is that there is no means of passing the types of the expected parameters to the function. To use variadic parameters in C, you need to know the type of each parameter, and their number. The well-known printf() does this through the format parameter. There is no way around it. You can't auto-detect the variadic parameters. So this approach would not be usable.
Supposing you find a way (through the preprocessor) to pass the types and number of parameters in a transparent manner (good luck), it would be so horrendous and bug-prone, bypassing all compiler type-checking, potentially doing very nasty stuff to the stack... eek. And being very inefficient, preventing the compiler to do a whole range of optimizations.
All this could be fun to discuss in a separate thread, but promoting funky (or borderline desastrous) C constructs in a thread that was meant to be about learning C properly is definitely not a good idea IMO.
As one of the users said, "I can write C in almost any language" or something.
And now it's evolving into "I can write C++ in almost any language"