Conversions/casts one more time

adam at mtund.UUCP adam at mtund.UUCP
Thu Dec 11 20:20:44 AEST 1986


> (Sorry if this has been asked before; my memory is sometimes [unsigned] short.)
> 
> When I compile and run the program below, I expect to get the same answer
> three times.  On our 11/750 under 4.3 BSD, I get
> 	c = ffffffaa, (char)uc = ffffffaa, (char)ucf() = aa
> Seems to me that I ought to get ffffffaa for all three.
> 
> Questions:
> 1) Am I missing something, or did the BSD compiler just drop a conversion?
> 2) Is this sort of thing supposed to be implementation dependent?
> 3) My July '86 version of the X3J11 draft says (in 3.3.4), "A cast that
>    specifies an implicit conversion or no conversion has no effect on the
>    type or value of an expression."  What the heck does that mean, really?
>    Does it have anything to do with questions 1) and 2)?
> 
> ----
> unsigned char ucf() { return 0xaa; }
> 
> main() {
> 	char c;
> 	unsigned char uc = 0xaa;
> 
> 	c = uc;
> 	printf("\tc = %x, (char)uc = %x, (char)ucf() = %x\n",
> 	  c, (char)uc, (char)ucf());
> }
> ----
> Wendy Thrash -- UniSoft Corporation
> {ucbvax,lll-lcc,sun}!unisoft!wendyt

Ugh. %x expects an int, so the result of feeding it a char is,
*and ought to be*, UNDEFINED.
				Adam Reed (mtund!adam)



More information about the Comp.lang.c mailing list