Re: typedef name question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I am not sure whether following case is a gcc bug or not :


typedef int foo;

foo foo_fct(int a) {

foo foo; /* line 3: a variable foo with type foo */

   return (foo)foo;        /* line 4: gcc reports syntax error */
}


If gcc could , somehow, figure out the line 3 is a variable declaration, maybe it should be able to handle line 4 , which is a cast expression.


Regards,

Mike


----- Original Message ----- From: "Ian Lance Taylor" <iant@xxxxxxxxxx>
To: "Michael Gong" <mwgong@xxxxxxxxxxxxxx>
Cc: <gcc-help@xxxxxxxxxxx>
Sent: Tuesday, January 23, 2007 10:28 AM
Subject: Re: typedef name question


"Michael Gong" <mwgong@xxxxxxxxxxxxxx> writes:

To clarify myself a bit, is my following understanding correct ?

For this case:
    int main() {
        int foo;
        foo abc;
    }
The Gcc's grammar does parse it, ie. an "identifier" can follow
another "identifier".
Then in the semantic analysis, gcc checks to make sure the first
identifier "foo" must represent a type. In this case, it is not. So an
error is reported.

I think you may be applying compiler theory to a real world compiler.

A better way to describe what happens would be to say that the lexer
looks up each identifier in the symbol table to see whether it is a
type before the parser proper ever sees it.

A truer way to describe what happens would be to observe that gcc uses
a recursive descent parser, not a grammar.

Ian



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux