Question on ANSI ## pre-processor operator.

Stephen Vinoski vinoski at apollo.HP.COM
Thu May 16 05:27:00 AEST 1991


In article <519416cd.20b6d at apollo.HP.COM> vinoski at apollo.HP.COM (Stephen Vinoski) writes:
>In article <28302040.69ED at deneva.sdd.trw.com> knurlin at spf.trw.com (Scott Karlin) writes:
>>I am looking for a clarification on the ANSI-C token merging
>>operator (##).  According to H&S:  "After *all* [emphasis mine]
>>macro replacements have been done, the two tokens surrounding
>>any ## operator are combined into a single token."  I interpret
>>this to mean that:
>>
>>#define INDEX 0
>>#define FN_NAME(x) name ## x
>>void FN_NAME(INDEX) () { printf("Hello\n"); }
>
>I had a problem with token pasting similar to yours.  A compiler
>writer said that the problem was caused by the fact that I was
>attempting to paste arbitrary text with macro parameters; he said that
>token pasting is only meant to work on macro parameters.
>
>The ANSI C standard appears to agree with him; I believe it is section
>3.8.3.3 (I don't have the standard handy) that says that ## causes
>macro parameters to be pasted together.  If I have misinterpreted the
>standard, I'm sure I will hear about it.  :-)

Well, what do you know - I *did* misinterpret the standard.  Sigh.
Section 3.8.3.3 states that preprocessor tokens can be pasted
together.  The problem knurlin at spf.trw.com has is caused by the fact
that token pasting occurs before the result is rescanned for further
macro replacement.  Thanks to steven at pacific.csl.uiuc.edu (Steven
Parkes) for setting me straight on this one.

I hereby promise not to quote the standard from memory again.


-steve

| Steve Vinoski  (508)256-0176 x5904       | Internet: vinoski at apollo.hp.com  |
| HP Apollo Division, Chelmsford, MA 01824 | UUCP: ...!apollo!vinoski         |



More information about the Comp.lang.c mailing list