Date: Tue, 20 Jan 1998 13:31:54 -0800 From: John-Mark Gurney <gurney_j@efn.org> To: Terry Lambert <tlambert@primenet.com> Cc: ????????????? <ache@nagual.pp.ru>, current@FreeBSD.ORG Subject: Re: Nasty GCC bug? Message-ID: <19980120133154.34281@hydrogen.nike.efn.org> In-Reply-To: <199801202053.NAA25835@usr06.primenet.com>; from Terry Lambert on Tue, Jan 20, 1998 at 08:53:41PM %2B0000 References: <Pine.BSF.3.96.980120224412.28008A-100000@lsd.relcom.eu.net> <199801202053.NAA25835@usr06.primenet.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Terry Lambert scribbled this message on Jan 20: > > On Tue, 20 Jan 1998, Terry Lambert wrote: > > > > > What is happening is that the value is being sign-extended to int > > > when it is pushed on the stack. > > > > It is absolutely no bug here, it is THE RULE. > > > > All types smaller than int promotes to int in any expression, and signed > > types promotes _with_ sign extension. Function argument is an expression. > > I typed the wrong subject. My complaint was about how %02x worked > with sign extended character values. As I pointed out, not doing the > extension would break %d, and it's the fact that printf didn't know > it was a character value that had been sign extended instead of an > int value that was the bug. > > %x expects and int, %lx expects a long. There is not one that expects > a short or a char. actually... there is one for the short... didn't you read the man page? :) o The optional character h, specifying that a following d, i, o, u, x, or X conversion corresponds to a short int or unsigned short int ar- gument, or that a following n conversion corresponds to a pointer to a short int argument. but the char one is missing... > Also, my field width limits are being ignored. I kind of expected > it to print out a field limit's worth of hex characters, starting at > the lsb. yes... you specified minium field width.. therer is no way to limit the number of characters outputed from x... > The problem initially showed in a program that sscanf'ed into an > int of %2x, assigned a character array valued to the int, and then > tried to printf the char value to get back out what it scanned in. > > The resulting output not matching the input was unexpected, since > it's sort of normal to expect that printf/scanf are inverse functions. -- John-Mark Gurney Modem/FAX: +1 541 683 6954 Cu Networking P.O. Box 5693, 97405 Live in Peace, destroy Micro$oft, support free software, run FreeBSD
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980120133154.34281>