NOTE: After I wrote this I'm not actually sure what va_args does with a struct or how to get a pointer to the first member...
I think you would still need to know the exact type inside of struct_printf(), unless you knew exactly how the compiler would pack a struct onto the stack or registers, and that it was exactly the same as individual parameters.
Combine this with struct definitions in function bodies and I see a great teamup with variadic functions.
Take a theoretical struct_printf, which prints out non promoted data with struct packing (not variadic stack packing, which requires type promotion)
Now we can actually pass what we mean to pass without the compiler changing it.NOTE: After I wrote this I'm not actually sure what va_args does with a struct or how to get a pointer to the first member...