[MLton] Porting MLton... C99?
   
    Filip Pizlo
     
    pizlo@purdue.edu
       
    Thu, 9 Dec 2004 22:28:46 -0500 (EST)
    
    
  
> > All those printf("%08x", (uint)ptr); lines scattered everywhere are also a
> > problem. The best way to do this is to change it to printf("%08lx",
> > (ulong)z), no matter what type z is. When using uintX_t you have no idea
> > what that corresponds to in a format string so upgrading to the largest
> > portable formatted type is the best approach.
> 
> I agree with the principle.  But wouldn't using long long be better
> than long?
Actually inttypes.h (which is more wide-spread than stdint.h, I have
found) gives you string constants for format strings corresponding to all
of the [u]int[8|16|32|64]_t types.  Here's an example of what it looks
like on my Mac:
  #define PRId16        "hd"
  #define PRIi16        "hi"
  #define PRIo16        "ho"
  #define PRIu16        "hu"
  #define PRIx16        "hx"
  #define PRIX16        "hX"
  #define PRId32        "d"
  #define PRIi32        "i"
  #define PRIo32        "o"
  #define PRIu32        "u"
  #define PRIx32        "x"
  #define PRIX32        "X"
... and so on, including 64-bit defines, and pointer defines.  Although
it's rather wordy you can just write:
printf("%08" PRIxPTR, ptr);
and expect to get portable behavior.
--
Filip Pizlo
http://bocks.psych.purdue.edu/
pizlo@purdue.edu