Объекты, объявленные вне процедур, называются внешними, объекты, объявленные внутри процедур и блоков, - внутренними.
Областью видимости (scope) объекта является та часть программы, в пределах которой использование его имени является корректным.
Область видимости имени (определения или описания) внутреннего объекта – это процедура или блок, в которой(ом) находится это определение или описание.
Области видимости внешнего объекта в языках Cи Basic несколько отличаются. В языке Cона распространяется от места его определения до конца файла. Напомним, что в этом языке допустимо определение внешнего объекта между определениями функций. В языке Basic эта область охватывает весь модуль (файл).
Если одно и то же имя объявлено на разных уровнях структуры, то это объявление разных объектов и всегда превалирует более "внутреннее" объявление имени, если мы находимся в его области видимости.
Пример. Приводится на языке C, поскольку он имеет больше уровней структуры. Стрелками с номером показаны области видимости соответствующего объекта по имени a.
#define SIZE 100
float a[SIZE]; _______ /* 1-й объект */
.............. |
| ß 1
void main(void){ |
int a,b; _____| /* 2-й объект */
........ | ß 2
{doublea,c; __| /* 3-й объект */
........... | ß 3
} _|_
........ | ß 2
} /* End main */ ___|
int func1(...){ _______
int k,l; |
........ | ß 1
{char a,e; _____| /* 4-й объект */
......... | ß 4
} __|___
........ | ß 1
} /* End func1 */ |
|
int func2(...){ |
.......... | ß 1
} /* End func2 */ ______|
Объекты, объявленные во внешних уровнях структуры, называются глобальными по отношению к объектам вложенных в них уровней. Области видимости имен называют областями локализации, а соответствующие данные локальными по отношению к области видимости.
Пример.
Первый объект с именем a предыдущего примера глобален по отношению к другим областям локализации, но локален в файле.
Второй объект с именем a глобален для блока, содержащего определение третьего объекта с именем a, но локален в функции main.
Третий объект с именем a локален в блоке.
В языке Cфайл может содержать одни объявления, которые затем могут быть включены в нужные места программы с помощью директивы препроцессора #include.
Рекомендация. Если в программе используются сложные структуры, то их тип разумно описать с помощью инструкции typedef и объединить в один .hфайл.
Кроме области видимости объекты программы обладают временем жизни (lifetime). Время жизни – это период времени, в течение которого объекту выделяется память. Для внешних объектов память резервируется на все время выполнения приложения. Внутренние объекты в большинстве случаев существуют (имеют выделенную память) только при выполнении процедуры или блока, в которой(ом) они определены. Обычно после завершения работы процедуры или блока отведенная им память освобождается.
И в языке C, и в языке Basic есть средства, которые управляют областью видимости и временем жизни объектов программы. Механизм управления в них, однако, различен, поэтому рассмотрим эти средства по отдельности.