如何识别范围

How to identify scopes?

本文关键字:范围 识别 何识别      更新时间:2023-10-16

所以,我首先要说的是,是的,这是家庭作业,但不,我不只是在寻找答案,我只是想对如何解决这个问题有某种理解。

我正在寻求帮助的问题给出了一个"骨架"C++程序:

int a, b, c, d;             //global variables
void Sub1();                //prototype
void Sub2();                //prototype
void main () {
    int a, b, c;
          . . .  <---------- marked point 1
}
void Sub1() {
    int b, c, d;
    . . .  <---------------- marked point 2
    while (. . .) {
       int c, d, e;
       . . . <-------------- marked point 3
    }
    . . .
}  //end Sub1
void Sub2() {
   int d, e;
   . . .  <----------------- marked point 4
}

我遇到的问题是"确定嵌套在另一个范围内的作用域。例如:从第 3 行开始到第 4 行结束的范围嵌套在从第 1 行开始到第 8 行结束的作用域中。

首先,我不明白该示例如何是此类范围的正确示例。 我可能会对作用域到底是什么感到困惑,但我认为因为 Sub1(( 和 Sub2(( 是在任何函数之外声明的,它们将是全局的,因此它们的作用域将从第 1 行到程序末尾。 请帮助我理解为什么它们的范围是从第 1 行到第 8 行,也许我可以理解如何完成这个问题。

您对行号的引用实际上没有意义,但除此之外,范围真的很简单:

考虑您所在的"当前"范围(最内{ }中的所有内容(,如果您看到一个在大括号内声明的变量具有给定的名称,那么这就是将在此作用域中使用的变量。如果未找到该名称,请查看其父范围,依此类推。如果没有更多的大括号,则参考全局变量。