Внешние переменные
Внешние переменные
Переменная, описанная вне функции, является внешней. Внешнюю переменную можно также описать в функции, которая использует ее, при помощи ключевого слова extern. Описания могут выглядеть примерно так:
int errupt; /* Три переменные, описанные вне функции */
char coal;
double up;
main( )
{
extern int errupt; /* объявлено, что 3 переменные */
extern char coal; /* являются внешними */
extern double up;
Группу extern-описаний можно совсем опустить, если исходные определения переменных появляются в том же файле и перед функцией, которая их использует. Включение ключевого слова extern позволяет функции использовать внешнюю переменную, даже если она определяется позже в этом или другом файле. (Оба файла, конечно, должны быть скомпилированы, связаны или собраны в одно и то же время.)
Если слово extern не включено в описание внутри функции, то под этим именем создается новая автоматическая переменная. Вы можете пометить вторую переменную как "автоматическую" с помощью слова auto и тем самым показать, что это ваше намерение, а не оплошность. Три примера демонстрируют четыре возможных комбинация описаний:
/* Пример1 */
int hocus;
main( ) {
extern int hocus; /* hocus описана внешней */
...
}
magic( ) {
extern int hocus;
...
}
Здесь есть одна внешняя переменная hocus, и она известна обеим функциям main( ) и magic( ).
/* Пример2 */
int hocus ;
main( )
{
extern int hocus; /* hocus описана внешней */
...
}
magic( )
{
/* hocus не описана совсем */
...
}
Снова есть одна внешняя переменная hocus, известная обеим функциям. На этот раз она известна функцииmagic( ) по умолчанию.
/* Пример3 */
int hocus;
main( )
{
int hocus; /* hocus описана и
является автоматической по умолчанию */
...
}
magic( )
{
auto int hocus; /* hocus описана автоматической */
...
}
В этом примере созданы три разные переменные с одинаковым именем. Переменная hocusв функции main( )является автоматической по умолчанию и локальной для main( ), в функции magic( )она явно описана автоматической и известна только для magic( ). Внешняя переменная hocus неизвестна ни main( ), ни magic( ), но обычно известна любой другой функции в файле, которая не имеет своей собственной локальной переменной hocus.
Эти примеры иллюстрируют область действия внешних переменных. Они существуют, пока работает программа, и так как эти переменные доступны любой функции, они не исчезнут, если какая-нибудь одна функция закончит свою работу.