printf
and other varargs functions aren’t called the way normal C functions are. IIRC, each compiler is free to implement the varargs calling convention differently, although in practice I think there’s a fairly standard way to do it (I don’t recall what it is, but I think it involves an implicit **void
argument terminated by a NULL
pointer (kind of the obvious way you’d do it manually). You would need to emulate the C varargs calling convention in order to call printf
correctly.