作者allstarschh (allstars)
看板PLT
标题[问题]如何去get C variable的scope ?
时间Thu Jun 26 11:49:53 2008
我的问题是想如何得到variables的scope number
例如
void foo()
{
int a;
{
int b;
}
b=1; // <- compile error here
}
b=1那会有compile error
但是我想了解 "compiler" 是如何知道的
在书上看到 compiler会把这些variable加到symbol table里
但由於有scope的关系
所以symbol table会有地方来store scope number
并藉由maintain 一个scope stack 来作variable的binding
所以我想把上面的程式加上一个function
void foo()
{
int a;
get_scope_number_and_print(); //assume scope# is 2
{
int b;
get_scope_number_and_print(); //assume scope# is 3
}
get_scope_number_and_print(); // assume scope# is 2
b=1;
}
and the first and last get_scope_number_and_print()
should get the same result
所以compiler 在b=1前面时 能在symtab里找scope is 2 的var
发现并没有b and complains 'b not found !'
但是我想scope ,symtab这些东西是compiler dependant的
所以想问gcc有没有提供API来得到这些information
我是有知道gdb可以看的出
像gdb里面的 maint print type or
maint print symbols
例如maint print type 里
<gdb>
....<skip>
type node 0x10113ed0
name 'int' (0x1010cde0)
tagname '<NULL>' (0x0)
code 0x7 (TYPE_CODE_INT)
length 4
upper_bound_type 0x0 (BOUND_
lower_bound_type 0x0 (BOUND_
objfile 0x10105260
target_type 0x0
pointer_type 0x0
reference_type 0x0
type_chain 0x10113ed0
instance_flags 0x0
flags 0x0
nfields 0 0x0
vptr_basetype 0x0
vptr_fieldno -1
type_specific 0x0
</gdb>
这里面.......好像就没有scope的information???
或者是由上面的某个memory address来知道scope information??
如果能有大大来说明一下上面是啥鬼东西就好了
不过在maint print symbols
可以看到有Blockvector 的东西
而这block number 的index
就跟我说的scope number 一样
由这个Blockvector 就可以来作variable的binding了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.22.63.250