Here is an alternative. All you need to do is call vprintf followed by some code which outputs a newline. You don't need buffers or anything like that. If you are using GCC you can even get it to check your format string for you.
Code:
#include <stdio.h>
#include <stdarg.h>
#ifdef __GNUC__
int printfln(const char *format, ...)
__attribute__ ((format (printf, 1, 2)));
#endif
int printfln(const char *format, ...)
{
va_list ap;
va_start(ap, format);
int ret = vprintf(format, ap);
va_end(ap);
puts("");
return ret;
}
//
// Example usage
//
int main()
{
printfln("x: %d"); // WARNING: 'int' argument missing.
printfln("y: %d", 234);
printfln("z: %d", 345);
printfln("Bye.");
return 0;
}