Path: csiph.com!3.us.feeder.erje.net!feeder.erje.net!news.linkpendium.com!news.linkpendium.com!news.iecc.com!.POSTED.news.iecc.com!nerds-end From: Hans-Peter Diettrich Newsgroups: comp.compilers Subject: Preprocessing ## Date: Sat, 13 May 2017 08:49:36 +0200 Organization: Compilers Central Lines: 11 Sender: news@iecc.com Approved: comp.compilers@iecc.com Message-ID: <17-05-003@comp.compilers> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Info: miucha.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="6245"; mail-complaints-to="abuse@iecc.com" Keywords: question Posted-Date: 14 May 2017 21:21:48 EDT X-submission-address: compilers@iecc.com X-moderator-address: compilers-request@iecc.com X-FAQ-and-archives: http://compilers.iecc.com Xref: csiph.com comp.compilers:1870 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? DoDi [I would guess that some macro between ( and ## expanded to nothing. Or it could just be one of those text editing errors. -John]