Локальные и глобальные переменные

Одна из сильных сторон языка С заключается в возможности управления мелкими деталями программы. Примером подобного управления служат классы памяти – они дают возможность определить, с какими функциями связаны какие переменные и как долго переменная сохраняется в программе.

Каждая из переменных программы имеет определенный тип. Кроме того, каждая переменная имеет определенный класс памяти. Для описания классов памяти существует 4 ключевых слова: extern (внешний) - глобальный, auto (автоматический) - локальный, static (статический) и register (регистровый).

В отличие от локальных, глобальные переменные определяются вне тела какой-либо функции и «видны» сразу нескольким функциям. Исходный текст программы можно хранить в нескольких файлах. Эти части каждый раз транслировать вместе нет никакой необходимости. Ранее скомпилированные программы можно загружать из библиотек.

Рассмотрим пример.

#include <stdio.h>

#include <conio.h>

 

int conclusion();

 

char Answer; // Глобальная переменная

 

//-----------------------------------------------

void main()

{

printf ("\nWhether you can swim?? ('Y/N')");

do {

Answer = getche();

} while(!conclusion());

}

 

//-----------------------------------------------

int conclusion()

{

int retcode;

switch(Answer)

{

case 'Y':

case 'y': retcode = 1;

printf ("\nOk!\n");

break;

 

case 'N':

case 'n': retcode = 1;

printf ("\nBad!\n");

break;

 

default: retcode = 0;

printf ("\nThe answer is not identified! Repeat, please!\n");

}

return retcode;

}

В этом случае переменная Answer является внешней переменной и может быть использована в любой из функций.

Объявленные внутри функции переменные считаются принадлежащими к классу auto, если не указано иначе.

Формальные аргументы для функций принадлежат к классу auto, но можно задать для них класс register.

Класс памяти переменной определяется местом ее описания и ключевым словом, если оно используется. Класс памяти определяет три условия:

1. От него зависит, какие функции имеют доступ к переменной. Если фрагмент кода может использовать определенную переменную, говорят, что переменная видима в данном разделе. Доступность переменной различным частям программы задает ее область видимости.

2. В каком количестве мест одна и та же переменная может объявляться. Это свойство называется связыванием переменной.

3. Длительность существования переменной в памяти – продолжительность хранения.

Переменная может иметь одну из трех областей видимости (действия):

1. В пределах файла (модуля) - доступна от точки определения до конца файла, содержащего определение. Например, переменная Answer из предыдущего примера.

2. В пределах блока - доступна от точки определения, до конца блока, содержащего определение. Использовавшиеся до сих пор локальные переменные, включая формальные аргументы функций, имеют область видимости в пределах блока.

3. В пределах прототипа функции - применима к именам переменных, используемым в прототипах функций, например

double Oper (double Argument);

 

Переменная может связываться:

1. внешним образом (может использоваться в любом месте программы, включающей несколько модулей (файлов);

2. внутренним образом (может использоваться в любом месте единственного файла);

3. не связываться (используется только в блоке, где она описана).

Переменная может иметь продолжительность хранения:

1. статическую (существует на протяжении выполнения программы)

2. автоматическую (гарантированно существует лишь во время выполнения того блока, в котором она описана). Она создается в момент начала выполнения блока и ликвидируется по завершению его работы.

Внешние переменные (подобно Answer) имеют статическую продолжительность хранения.








Дата добавления: 2016-04-14; просмотров: 857;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.