[mod.std.c] mod.std.c Digest V5#8

osd7@homxa.UUCP (Orlando Sotomayor-Diaz) (04/24/85)

From: Orlando Sotomayor-Diaz (The Moderator) <cbosgd!std-c>


mod.std.c Digest            Wed, 24 Apr 85       Volume 5 : Issue   8 

Today's Topics:
                   comments in pre-processor lines
                     CTRL(x) in the ANSI standard
----------------------------------------------------------------------

Date: Tue, 23 Apr 85 00:25:06 cst
From: ihnp4!ut-sally!cyb-eng!bc
Subject: comments in pre-processor lines

I am relatively new to the net, and perhaps I have missed some dialogue,
but it just seems crazy to me to impose a free-format comment mechanism
like /* */ onto preprocessor lines.  As stated on p. 207 of K&R, "These
lines have syntax independent of the rest of the language; ...".  What is
a preprocessor to do if he sees a /* and no */?  His scanning stops at the
end of the current line.  Does he pick up *inside comment* on the next
preprocessor line?  This is ridiculous!

Nowhere I have been able to find is /* */ considered to be white space by
a *preprocessor*!  All those characters are just characters to him/her.
I will let Dennis Ritchie speak for himself (I haven't seen any comment by
him on this topic), but if I were to guess how he would have implemented
the idea of comments on preprocessor lines -- given their line-oriented,
relatively fixed-format structure, he would have suggested that anything
after a second # on the same line be considered a comment.  Certainly MY
vote would go for that.

So you say:

        #ifdef VERBOSE
        ...
        #endif #VERBOSE

Not so bad.

------------------------------

Date: Tue, 23 Apr 85 17:08:17 est
From: <ihnp4!decvax!mcnc!rtp47!gamma>
Subject: CTRL(x) in the ANSI standard

    I just realized there is another method of supporting the CTRL macro
which I believe is in /usr/include/sys/types.h.  It is somewhat longer
than the previous method of derefencing a string made from the argument,
but should work in case statements, and static initializations.

	enum _CTRL_kludge {
		_CTRL_A = 1,	/* upper case control chars */
		_CTRL_B,
		_CTRL_C,
		   ...
		_CTRL_Y,
		_CTRL_Z,

		_CTRL_a = 1,	/* handle lower case as well */
		_CTRL_b,
		_CTRL_c,
		    ....
		_CTRL_y,
		_CTRL_z
	};

	#define	CTRL(arg)	((int) _CTRL_ ## arg)


Thus, instead of using string-izing, it uses token pasting, and it could
be easily adapted to work on EBCDIC as well (if it supports the notion of
control characters), which the old  'x' & 077 does not.

	Michael Meissner
	Data General Corporation
	...ihnp4!mcnc!rti-sel!rtp47!meissner

------------------------------

End of mod.std.c Digest - Wed, 24 Apr 85 08:35:15 EST
******************************
USENET -> posting only through cbosgd!std-c.
ARPA -> ... through cbosgd!std-c@BERKELEY.ARPA (NOT to INFO-C)
In all cases, you may also reply to the author(s) above.