Re: Preprocessing ##

Kaz Kylheku <>
Mon, 15 May 2017 13:41:08 +0000 (UTC)

          From comp.compilers

Related articles
Preprocessing ## (Hans-Peter Diettrich) (2017-05-13)
Re: Preprocessing ## (Hans-Peter Diettrich) (2017-05-15)
Re: Preprocessing ## (Kaz Kylheku) (2017-05-15)
Re: Preprocessing ## (George Neuner) (2017-05-15)
| List of all articles for this month |

From: Kaz Kylheku <>
Newsgroups: comp.compilers
Date: Mon, 15 May 2017 13:41:08 +0000 (UTC)
Organization: NNTP Server
References: 17-05-003
Injection-Info:; posting-host=""; logging-data="8665"; mail-complaints-to=""
Keywords: C, comment
Posted-Date: 15 May 2017 10:47:09 EDT

On 2017-05-13, Hans-Peter Diettrich <> wrote:
> How is the C preprocessor assumed to handle the ## concatenation operator?
> In the Windows headers I found macros like
> #define foo(x) bar(##baz(x))
> where an expansion into ... (baz ... doesn't make sense, because "(baz"
> is not a valid preprocessor token. Can somebody explain the meaning and
> handling of such constructs?

According to ISO C, if the result of the ## operator is an invalid
token, the behavior is undefined.

If you're making a compiler which will have to handle the unmodified
header files from Microsoft platform development kits for Windows, you
have little choice but to implement compatible preprocessing, which
handles whatever constructs occur, in the same way.

In other words, the actual meaning here is "whatever Visual C does".
[Ugh. But I have to agree. -John]

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.