typedefs, etc.

Alan S. Driscoll alan at allegra.UUCP
Sat Jan 14 14:59:29 AEST 1984


	From: chris at umcp-cs.UUCP
	Newsgroups: net.unix
	Subject: Re: typedefs, etc. - (nf)

	Re:
		From: keesan at bbncca.UUCP

		[ Re: ...  typedef enum { FALSE, TRUE } bool; ... ]

		I question the utility of a 'bool' type which generates
		type-clashes with boolean expressions.  However, if you
		insist on using it, do you object to 

			return( (bool)(getchar() == 'y') );

		?  This avoids the type-clash warning, and is guaranteed
		to work.

	Unfortunately it's not *guaranteed* to work, unless you use

		typedef enum { FALSE = 0, TRUE = 1 } bool;

	to ensure that (bool) 0 == FALSE and (bool) 1 == TRUE.  Otherwise
	the result of a boolean expression may be neither FALSE nor TRUE!


You're wrong.  In fact,

	typedef enum { FALSE, TRUE } bool;

is guaranteed to do the right thing.  The C Reference Manual (September,
1980) states

	The identifiers in an enum-list are declared as constants, and
	may appear wherever constants are required.  If no enumerators
	with = appear, then the values of the corresponding constants
	begin at 0 and increase by 1 as the declaration is read from left
	to right.  An enumerator with = gives the associated indentifier
	the value indicated; subsequent identifiers continue the progression
	from the assigned value.

So, FALSE will be given the value 0 and TRUE the value 1 because of their
*positions* in the declaration.

It amazes me how much misinformation appears on the net.


	Alan S. Driscoll
	AT&T Bell Laboratories



More information about the Comp.unix mailing list