From: bc@freeuk.com   
      
   On 06/02/2026 12:47, Michael S wrote:   
   > On Fri, 6 Feb 2026 12:39:55 +0000   
   > Bart wrote:   
   >   
   >> On 06/02/2026 05:10, Keith Thompson wrote:   
   >>> Bart writes:   
   >>> [...]   
   >>>> /Some/ compilers with /some/ options will /sometimes/ tell you when   
   >>>> you've got it wrong.   
   >>>>   
   >>>> But you first have to make an educated guess, or put in some dummy   
   >>>> format code.   
   >>>>   
   >>>> Eventually, it will compile. Until someone else builds your   
   >>>> program, using a slightly different set of headers where certain   
   >>>> types are defined, and then it might either give compiler messages   
   >>>> that they have to fix, or it show wrong results.   
   >>>   
   >>> That's not how I do it, and I don't think it's how most programmers   
   >>> do it.   
   >>>   
   >>> I know the rules well enough that I can usually write a correct   
   >>> format string in the first place. If I make a mistake, gcc's   
   >>> warnings are a nice check.   
   >>   
   >> I guess you've never used printf-family functions via the FFI of   
   >> another language!   
   >>   
   >>   
   >   
   > Vararg via FFI? Is it really a good idea?   
   >   
      
   It's covered by platform ABIs of both Windows and SYS V.   
      
   This is printf called from an interpreted language with dynamic typing:   
      
    a := 12345678987654321   
    b := pi   
    c := "A"*10   
    d := &a   
    printf("%lld %f %s %p\n", a, b, c, d)   
      
   Output is:   
      
   12345678987654321 3.141593 AAAAAAAAAA 00000000036A1D48   
      
   (Strings are converted to zero-terminated form for the FFI.)   
      
   If I try it like this however:   
      
    printf("%lld %f %s %p\n", d, c, b, a)   
      
   It will go wrong (crashing inside the C library). With the built-in   
   print feature, that doesn't happen:   
      
    println a, b, c, d   
    println d, c, b, a   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|