This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: preprocessing question
- From: Daniel Jacobowitz <drow at false dot org>
- To: Jan Beulich <jbeulich at novell dot com>
- Cc: gcc at gcc dot gnu dot org
- Date: Mon, 25 Sep 2006 12:43:51 -0400
- Subject: Re: preprocessing question
- References: <45181096.76E4.0078.0@novell.com>
On Mon, Sep 25, 2006 at 05:23:34PM +0200, Jan Beulich wrote:
> Can anyone set me strait on why, in the following code fragment
>
> int x(unsigned);
>
> struct alt_x {
> unsigned val;
> };
>
> #define x alt_x
> #define alt_x(p) x(p+1)
>
> int test(struct x *p) {
> return x(p->val);
> }
>
> the function invoked in test() is alt_x (rather than x)? I would have
> expected that the preprocessor
> - finds that x is an object like macro, and replaces it with alt_x
> - finds that alt_x is a function-like macro and replaces it with x(...)
> - finds that again x is an object like macro, but recognizes that it
> already participated in expansion, so doesn't replace x by alt_x a
> second time.
Why do you think that x has already participated in expansion? It
hasn't paricipated in the expansion of the function-like macro
alt_x, which is what is being considered, if I'm reading c99 right,
because no nested replacement of x occurred within the processing
of alt_x(). It's a different scan.
--
Daniel Jacobowitz
CodeSourcery