Need help using /usr/lib/cpp for generic text

Guy Harris guy at auspex.auspex.com
Sun Sep 24 05:55:00 AEST 1989


>ok at cs.mu.oz.au (Richard O'Keefe) writes:
>\...     #if 0
>\...     ...
>\        #endif 0
>\(a)            ^ this token is not legal in dpANS C; V.3 tends not to like it
>
>What!?  The rest of the line isn't ignored?  And what was the very good reason
>the ANSI committee decided so?

>From the Rationale (presented without comment - I neither endorse nor
reject their rationale, I merely present it):

	   Various proposals were considered for permitting text other
	than comments at the end of directives, particularly "#endif"
	and "#else", presumably to label them for easier matchup with
	their corresponding "#if" directives.  The Committee rejected
	all such proposals because of the difficulty of specifying
	exactly what would be permitted, and how the translator would
	have to process it.

Three notes:

	1) V.3 "tends not to like it", but merely spits out a warning -
	   the code will still compile.

	2) If you put "/*" and "*/" around the token, the resulting text
	   is legal (assuming, of course, that there's no "*/" in the
	   token, etc.).

	3) If there already exist compilers that disallow extra tokens
	   like that, one should consider replacing them with comments
	   *anyway*.

>\(b) You should not use this technique to comment out text in a C program; new
>\C compilers are allowed to complain about mismatched quotes when they see
>\"don't" and other such text, and some _do_.
>
>I remember the discussion, but I don't recall the very good reason (here we
>go again) why those compilers could complain.  Quality of implementation?
>That's another point for Sun, 'cause their cpp works. :-)

Sun's "cpp" is derived from various versions of the AT&T preprocessor
(the precise version depends on the SunOS release); the credit doesn't
go to Sun, by and large, for it working in that particular case - you'll
probably find most, if not all, other Reiser-based "cpp"s (well, "cpp"s
based on Reiser's "cpp", not based on Reiser himself, but you knew what
I meant :-)), handle that particular case in the fashion you desire. 

The SunOS 4.x "cpp" is, BTW, based on the S5R3 "cpp", but the warning for
extra tokens at the end of "#else"/"#endif" was put under the control of
a "-p" (for "portability") flag to "cpp" (used, as I remember, only by
the S5-environment "lint" when it is given the "-p" flag) because the
practice was so widespread. 



More information about the Comp.unix.wizards mailing list