On anything but x86-32 or older processors, the output is undefined. The compiler authors when ANSI C was introduced decided to sacrifice performance in order to make the three ways of declaring a C function (K&R-style without arguments, with arguments, and with varargs) to generate the same code for the x86-legacy processors of that time.
However, newer ABI's, such as the x64 platform standard, define these function as using different rules for where to place the arguments, depending on the value in another register that is left uninitialized for non-variadic calls. On Win64, varargs are never placed in registers. On ARM, varargs are never optimized in their register allocation On Mon, Apr 21, 2014 at 1:30 AM, Dominique Orban <[email protected]> wrote: > I posted some timings here but I think they went unnoticed because they're > buried in a conversation: > https://groups.google.com/d/msg/julia-users/7Sn5yys0UJE/Fy8TyTNNQEQJ > > Jameson, could you be more specific? In what kind of situation would printf > give incorrect output? > > > On Sunday, April 20, 2014 8:06:52 PM UTC-7, Jameson wrote: >> >> just as a vague warning, va_arg lists are similar to, but subtly >> different from their fully specified counterparts. what this means is >> that calling printf from julia will work most of the time, but will >> also probably fail (by which I mean produce slightly incorrect output) >> at random and at the worst possible time given the same inputs >> >> On Sun, Apr 20, 2014 at 10:22 PM, Kevin Squire <[email protected]> >> wrote: >> > Looks interesting. I'm not at a computer right now, so can't test. Can >> > you >> > give an example run? How are the timings? >> > >> > Kevin >> > >> > >> > On Sunday, April 20, 2014, Dominique Orban <[email protected]> >> > wrote: >> >> >> >> Here's how I wrapped printf, allowing for varargs: >> >> https://gist.github.com/dpo/11000433 >> >> I'd be interested in any comments. I expect it's possible to wrap scanf >> >> similarly?! >> >> >> >> On Friday, February 21, 2014 5:05:32 PM UTC-8, Stefan Karpinski wrote: >> >>> >> >>> You could maybe make vscanf and company work though. In general, using >> >>> the c library for this kind of thing will be awkward. >> >>> >> >>> > On Feb 21, 2014, at 7:12 PM, "Steven G. Johnson" >> >>> > <[email protected]> >> >>> > wrote: >> >>> > >> >>> > Varargs functions like scanf won't work with ccall, in general.
