Fun C typos (was *p++ = *q++)

Ed Prochak ejp at faron.icd.abnet.COM
Fri Feb 17 08:31:01 AEST 1989


In article <15908 at mimsy.UUCP> chris at mimsy.UUCP (Chris Torek) writes:
>   In article <1184 at houxs.ATT.COM> beyer at houxs.ATT.COM (J.BEYER) writes:
>   >for(i == 0; ...
>   >
>   >Now the funny thing was that i was seldom equal to zero on entry to this
>   >loop, so it started at FALSE or 0 almost always. But once in a while
>   >i did == 0, so the loop would start at TRUE sometimes. TRUE is not 0 in
>   >our implimentation. Very  vexing to find.
>
>   This is not the proper group for this, but I have to say *something*.
>   That is not how for loops work in C, and the true-value of any comparison
>   operator in *any* correct C compiler is 1 (not -1, not 17, not 42, 1).
>   The latter in particular in a common misconception, probably left over
>   from FORTRAN (and BASIC) systems that used -1 as .TRUE..
>   -- 
>   In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163)
>   Domain:	chris at mimsy.umd.edu	Path:	uunet!mimsy!chris
>
Chris,
	He said nothing about the value that resulted from the comparison.
He said, "TRUE is not 0". and that is correct. Kernighan and Ritchie state
exactly that, on page 38 to be specific. A TRUE value in C does not have to
be 1 (one) for it to be a "correct C compiler". In C
	FALSE	=	0
	TRUE	=	NOT FALSE

Note that I did not use the unary negation operator which is guaranteed
to convert a 0 (FALSE) to a 1 (TRUE), but it accepts as TRUE any non-zero
value and converts it to 0. If you don't want problems, don't assume
that TRUE is always 1. Just a friendly word to the wise.

				Ed


PS I don't read comp.lang.c so send mail if the followup is interesting.
--
Edward J. Prochak        (216)646-4663       I think. 
{cwjcc,pyramid,decvax,uunet}!abvax!ejp       I think I am.
Allen-Bradley Industrial Computer Div.       Therefore, I AM!
Highland Heights,OH 44143                    I think?  --- Moody Blues



More information about the Comp.lang.c mailing list