Such an example can't be compiled:
#include <stdio.h> void x() { printf(__FUNCTION__ "\n"); } $ gcc printf.c -o fprintf printf.c: In function `x': printf.c:5: error: syntax error before string constant Then, the problem is not printf-specific and is not depend of <stdio.h>. The next example gives the same error: void y(const char *f, ...); void z() { y(__FUNCTION__ "\n"); } If some args are present in the ellipsis section (i.e. y(__FUNCTION__ ": %s\n", "xxx")), the problem doesn't vanish. And, if __FILE__ is used instead of __FUNCTION__, the problem is absent.