Как компилятор узнает, что [локальная переменная] находится вне области действия?
Прежде всего, давайте тщательно определим термины, которые вы используете. область действия именованного объекта - это область текста программы, в которой разрешено использовать имя объекта без дополнительной квалификации имени .
Область действия локальной переменной определяется спецификацией как область текста программы, представляющая собой весь блок , который немедленно содержит объявление.
Компилятор определяет область действия локальной переменной, отслеживая пространство локального объявления , связанное с каждым синтаксическим блоком .Когда нам нужно разрешить имя, мы выясняем, в каком блоке используется имя, и просматриваем соответствующее пространство объявлений.Конечно, блоки вложены, как и пространства объявления локальных переменных, поэтому нам, возможно, придется обратиться к нескольким, по порядку, изнутри наружу.
Фактические структуры данных, которые мы используем, - это простые хеш-таблицы, оптимизированные длябыстрый поиск и фильтрация различных аспектов, необходимых компилятору.(Например, нам иногда нужно искать имена, но мы хотим получать только типы или только методы и т. Д.)
Это отвечает на ваш вопрос?Это довольно неясный вопрос.