I don't get your meaning. The highest scope number is always
correct. It's the innermost open scope, which _is_ the current
scope. If there is no variable with the right name in the current
scope, then you'll get the one in the scope enclosing the current
scope, etc. So if you have int x; foo() { x = 1; }, the search finds
the global x. Etc.
On Jul 13, 9:25 pm, Ashish Goel <[email protected]> wrote:
> the highest scope may not be true, it uses the current scope to chk if the
> variable is defined there
> any pointer to study material?
>
> Best Regards
> Ashish Goel
> "Think positive and find fuel in failure"
> +919985813081
> +919966006652
>
>
>
> On Wed, Jul 14, 2010 at 6:28 AM, Gene <[email protected]> wrote:
> > On Jul 8, 1:34 pm, gopinath sikha <[email protected]> wrote:
> > > Hi guys,
>
> > > How gcc or any c compiler maintains the scope of the variable?
> > > Especially all the static variable are maintained in the data section.
>
> > > Can anyone please respond.
>
> > As a compiler processes the program, it maintains a table that maps
> > identifier strings to associated attributes like type information,
> > line number of declaration, etc., etc. This is called the symbol
> > table. It's often implemented as a hash table. Self-balancing trees
> > work fine, too.
>
> > There are at least a couple of different ways to process scopes. Here
> > is one.
>
> > The symbol table must allow duplicate keys for this technique, so it's
> > a multi-map rather than map.
>
> > The compiler gives every scope a number. It does this by keeping a
> > counter initialized at 0. Every time it sees a {, it increments the
> > counter and the new value becomes the scope number. It also pushes
> > each new scope number on a stack. At any given time, the stack
> > contains the numbers of open scopes, with the innermost scope at the
> > top.
>
> > When the compiler processes a declaration, the declared name is added
> > to the symbol table, and the scope number becomes one of its
> > attributes. If an attempt is made to add a variable twice with the
> > same scope number, a re-declaration error is printed for the user.
>
> > When the compiler processes a variable use (as in x = 42), it looks up
> > the variable (x) in the symbol table. If there is more than a single
> > x, it uses the one with the highest scope number because this must be
> > the "inner" scope where there is an x. If the variable (x) is not
> > found at all, then an "undefined identifier" error is printed for the
> > user.
>
> > When the compiler processes the end of a scope, a }, it pops the scope
> > stack. Say the closing scope is number N. Then the compiler removes
> > all symbol table entries with scope N as attributes and keeps on
> > processing.
>
> > That's about it. There are some details like handling the id's for
> > fields within structs, but I'm sure you can figure out how that works
> > on your own. I.e. when you have struct point { float x, y; } x; x.x
> > = 42; think about what the compiler is doing when it processes the
> > { in the strut declaration, when it sees the x and the y, when it sees
> > the second x and the third.
>
> > Cheers.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Algorithm Geeks" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]<algogeeks%2bunsubscr...@googlegroups
> > .com>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/algogeeks?hl=en.
--
You received this message because you are subscribed to the Google Groups
"Algorithm Geeks" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/algogeeks?hl=en.