home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / lang / c / 16101 < prev    next >
Encoding:
Internet Message Format  |  1992-11-08  |  1.8 KB

  1. Path: sparky!uunet!charon.amdahl.com!pacbell.com!ames!haven.umd.edu!darwin.sura.net!wupost!gumby!yale!yale.edu!ira.uka.de!gmd.de!Germany.EU.net!mcsun!news.funet.fi!hydra!klaava!wirzeniu
  2. From: wirzeniu@klaava.Helsinki.FI (Lars Wirzenius)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: The %lf format specifier.
  5. Message-ID: <1992Nov6.201125.8252@klaava.Helsinki.FI>
  6. Date: 6 Nov 92 20:11:25 GMT
  7. References: <1992Oct31.163810.8497@alf.uib.no>
  8. Organization: University of Helsinki
  9. Lines: 37
  10.  
  11. yngvar@imr.no (Yngvar Foelling) writes:
  12. >My question is: Is the %lf specifier really illegal in printf?  
  13.  
  14. It is definitely non-standard.
  15.  
  16. >In that case, why _does_ the standard define specifiers like %hd for
  17. >short, when short is always expanded to int?
  18.  
  19. What happens is that the short value is promoted to an int before the
  20. function is called, but the function converts it back before printing it
  21. out.  This has implications for at least the u, o, X, and x formats,
  22. where the value is actually converted to an unsigned.  For example, if
  23. you pass -(short)1 as the argument (which is an OK thing to do), the
  24. function gets -1 (a signed int) and convertes it to an unsigned short. 
  25. If it couldn't convert it to short, but had to use int, and if ints are
  26. longer than shorts, the value printed out would be different. 
  27.  
  28. Try this on a machine with ints that are larger than shorts:
  29.  
  30.     printf("%x\n", -1);
  31.     printf("%hx\n", -1);
  32.  
  33. For example, on a two's complement machine with 16-bit shorts and 32-bit
  34. longs, the output is:
  35.  
  36.     ffffffff
  37.     ffff
  38.  
  39. If there were no %hx, it wouldn't be possible to obtain the latter
  40. output.
  41.  
  42. I have no idea why %hd exists, though, unless it is because of
  43. orthogonality.
  44.  
  45. --
  46. Lars.Wirzenius@helsinki.fi  (finger wirzeniu@klaava.helsinki.fi)
  47.    MS-DOS, you can't live with it, you can live without it.
  48.