Strange C constructs

vbdis@aol.com (VBDis)
26 Feb 2004 01:08:58 -0500

          From comp.compilers

Related articles
Strange C constructs vbdis@aol.com (2004-02-26)
Re: Strange C constructs derek@NOSPAMknosof.co.uk (Derek M Jones) (2004-02-26)
Re: Strange C constructs iddw@hotmail.com (2004-02-27)
Re: Strange C constructs jeremy@jdyallop.freeserve.co.uk (Jeremy Yallop) (2004-02-27)
Re: Strange C constructs alexc@std.com (Alex Colvin) (2004-02-27)
Re: Strange C constructs derek@NOSPAMknosof.co.uk (Derek M Jones) (2004-03-02)
Re: Strange C constructs david.thompson1@worldnet.att.net (Dave Thompson) (2004-03-02)
[4 later articles]
| List of all articles for this month |
From: vbdis@aol.com (VBDis)
Newsgroups: comp.compilers
Date: 26 Feb 2004 01:08:58 -0500
Organization: AOL Bertelsmann Online GmbH & Co. KG http://www.germany.aol.com
Keywords: C, question
Posted-Date: 26 Feb 2004 01:08:58 EST

My selfmade C preprocessor stumbled across a strange construct in one of the
Windows headers. Now I would like to know whether this really makes sense:


#define something /##/


I can imagine that the intended effect is the creation of an comment
(// ...) in the source code, but IMO this is not achievable in
accordance to any C/C++ standard. An traditional preprocessor doesn't
recognize the ## operator, and newer preprocessors have to treat
comments before, or during, the tokenization, whereas the ## operator
is executing after tokenization, and there exists no valid
preprocessor token for "//".


Is this construct really a stupid Microsoft extension, intended to prevent the
compilation of Windows code with other compilers, or did I miss something in
the newer C specs?




Another question may be easier to answer:


typedef int (procname)(int arg);


According to K&R only /pointers/ to procedure-types can be constructed. Does
there exist newer specs which allow to typedef procedures themselves?


DoDi


Post a followup to this message

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