符号表和范围

时间:2016-10-12 03:03:49

标签: scope symbol-table

对于下面的代码,我试图为每个范围绘制符号表。范围是全局的,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);

1 个答案:

答案 0 :(得分:1)

使用关于作用域和变量声明的一些一般假设。

  1. 不是这样的。符号仅在声明时添加到符号表中。由于您只使用x,因此不会将其添加到任何表格中。所以你的问题有点没用。您的编译器会遇到使用符号x并在符号表中查找它。它将被发现为全球范围内的x

  2. f1(5)并未真正与任何符号表相关联。由于您正在进行函数调用,因此您必须查找f1以确保它存在(并且参数编号/类型匹配)。您将在全局范围的符号表中找到f1,因为它在使用之前已经被定义(同样,因为那时的代码只有一个范围,全局,只有一个表可供查看)。因此,f1(5)仅与您在符号表中找到f1符号和参数信息相关联。