prev up next   top/contents search

comp.lang.c FAQ list · Question 10.20

Q: I have some old code that tries to construct identifiers with a macro like

#define Paste(a, b) a/**/b
but it doesn't work any more.

A: It was an undocumented feature of some early preprocessor implementations (notably Reiser's) that comments disappeared entirely and could therefore be used for token pasting. ANSI affirms (as did K&R1) that comments are replaced with white space, so they cannot portably be used in a Paste() macro. However, since the need for pasting tokens was demonstrated and real, ANSI introduced a well-defined token-pasting operator, ##, which can be used like this:

	#define Paste(a, b) a##b

Here is one other method you could try for pasting tokens under a pre-ANSI compiler:

	#define	XPaste(s)	s
	#define	Paste(a, b)	XPaste(a)b
See also question 11.17.

References: ISO Sec.
Rationale Sec.
H&S Sec. 3.3.9 p. 52

prev up next   contents search
about this FAQ list   about eskimo   search   feedback   copyright

Hosted by Eskimo North