As mentioned in many of my previous questions, I'm working through K&R, and am currently into the preprocessor. One of the more interesting things -- something I never knew before from any of my prior attempts to learn C -- is the ##
preprocessor operator. According to K&R:
The preprocessor operator
##
provides a way to concatenate actual arguments during macro expansion. If a parameter in the replacement text is adjacent to a##
, the parameter is replaced by the actual argument, the##
and surrounding white space are removed, and the result is re-scanned. For example, the macropaste
concatenates its two arguments:
#define paste(front, back) front ## back
so
paste(name, 1)
creates the tokenname1
.
How and why would someone use this in the real world? What are practical examples of its use, and are there gotchas to consider?
UPDATE:
I accepted Brian R. Bondy's answer, but want to thank everyone who contributed -- and hopefully will contribute more in the future. Everything here was enlightening, and helped me understand this concept a bit better. I doubt I'll be using it anytime soon, but just knowing not only what it does, but that it is used -- and widely, apparently -- is tremendously helpful.
Thanks all!