ANSI printf

Michael Meissner meissner at osf.org
Fri Mar 8 08:47:32 AEST 1991


In article <1830 at manta.NOSC.MIL> mitch at manta.NOSC.MIL (Ray Mitchell) writes:

| 
| This question concerns the use of the "h" modifier in a printf conversion
| specification.  According to ANSI C, %hi, %hd, etc. indicate that the
| corresponding argument is to be printed as a short integer.  However, since
| all but the first printf argument are prototyped as being variable arguments,
| the usual default argument type conversions must occur.  Therefore, any
| argument of type short will be converted to int before being passed.  If ints
| and shorts are the same size, no problem.  If ints are larger than shorts,
| i.e., 32 bit ints and 16 bit shorts, still no problem since printf can
| use either all 32 bits or only the original 16 and the value will be the
| same.  As far as print format is concerned, doesn't a short get printed in the
| same format as an int?  If this is the case, I fail to see any reason for the
| existance of "h" since some bizzare form of "lint" would be the only thing
| that could detect a type mismatch.  (I know there must be something I
| am missing on this.)

Consider on a machine that has 16 bit shorts and 32 bit longs:

	short i = 0x8000;

	printf ("%#hx", i);

you want 0x8000 printed, and not 0xffff8000.
--
Michael Meissner	email: meissner at osf.org		phone: 617-621-8861
Open Software Foundation, 11 Cambridge Center, Cambridge, MA, 02142

Considering the flames and intolerance, shouldn't USENET be spelled ABUSENET?



More information about the Comp.std.c mailing list