|Strange C constructs email@example.com (2004-02-26)|
|Re: Strange C constructs derek@NOSPAMknosof.co.uk (Derek M Jones) (2004-02-26)|
|Re: Strange C constructs firstname.lastname@example.org (2004-02-27)|
|Re: Strange C constructs email@example.com (Jeremy Yallop) (2004-02-27)|
|Re: Strange C constructs firstname.lastname@example.org (Alex Colvin) (2004-02-27)|
|Re: Strange C constructs derek@NOSPAMknosof.co.uk (Derek M Jones) (2004-03-02)|
|Re: Strange C constructs email@example.com (Dave Thompson) (2004-03-02)|
|Re: Strange C constructs firstname.lastname@example.org (2004-03-02)|
|Re: Strange C constructs email@example.com (Victor Zverovich) (2004-03-02)|
|[2 later articles]|
|From:||firstname.lastname@example.org (Dave Hansen)|
|Date:||27 Feb 2004 22:11:21 -0500|
|Posted-Date:||27 Feb 2004 22:11:21 EST|
On 26 Feb 2004 01:08:58 -0500, email@example.com (VBDis) wrote:
>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 /##/
>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?
Although I won't speculate on their motivation, you are correct that
this is nonstandard and an error. Specifically, comments are replaced
by whitespace in phase 3, and preprocessing directives are executed in
>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?
The above defines a type, specifically "procname", which is a function
taking an int and returning an int. This is perfectly legal. (The
parens around "procname" aren't required.)
However, you can't use the unadorned type to define an object for
function. For example
You can only use it to define other types, e.g.
typedef procname *procptr;
are all OK.
Return to the
Search the comp.compilers archives again.