【问题标题】:symbol tables and scope符号表和范围
【发布时间】:2016-10-12 03:03:48
【问题描述】:

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

【问题讨论】:

    标签: scope symbol-table


    【解决方案1】:

    处理一些关于范围和变量声明的一般假设。

    1. 并非如此。符号仅在声明时才添加到符号表中。由于您只使用x,因此不会将其添加到任何表中。所以你的问题有点没有意义。您的编译器会遇到符号 x 的使用并在符号表中查找它。它会在全局范围内作为x 找到。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2016-02-06
      • 2011-04-23
      • 2012-07-07
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多