对于下面的代码,我试图为每个范围绘制符号表。范围是全局的,f1,else和f2。我想知道对于f2,x是否会被视为该范围的符号。此外, f1(5)是否与任何符号表相关联?
int x = 3;
int f1(int x) {
if (x > 4)
f1(x-1);
else {
int x = 1; f2();
}
}
int f2() {
print x;
}
f1(5);
答案 0 :(得分:1)
使用关于作用域和变量声明的一些一般假设。
不是这样的。符号仅在声明时添加到符号表中。由于您只使用x
,因此不会将其添加到任何表格中。所以你的问题有点没用。您的编译器会遇到使用符号x
并在符号表中查找它。它将被发现为全球范围内的x
。
f1(5)
并未真正与任何符号表相关联。由于您正在进行函数调用,因此您必须查找f1
以确保它存在(并且参数编号/类型匹配)。您将在全局范围的符号表中找到f1
,因为它在使用之前已经被定义(同样,因为那时的代码只有一个范围,全局,只有一个表可供查看)。因此,f1(5)
仅与您在符号表中找到f1
符号和参数信息相关联。