Область действия переменных


В языке Си нет ключевого слова, указывающего область действия (видимости) объекта. Область действия определяется местоположением декларации объекта в файле исходного текста программы.

Напомним общую структуру исходного текста программы:

<директивы препроцессора>

<описание глобальных объектов>

<заголовок функции>

{

<описание локальных объектов>

<список инструкций>

}

Файл исходного текста может включать любое количество определений функций и/или глобальных данных.

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

#include<stdio.h>

int f1(int);

int f2(int);

int f3(int);

int n; // Глобальная n

void main (void)

{

int i=2; // Локальная i=2

n=3; // Глобальная n=3

i = f1(i); // Обе переменные i – локальные

printf(" 1: i=%d , n=%d\n",i,n); // i=7, n=3

n = f1(i); // n – глобальная, i – локальная

printf(" 2: i=%d , n=%d\n",i,n); // i=7, n=12

i = f2(n); // i и n – локальные

printf(" 3: i=%d , n=%d\n",i,n); // i=15, n=12

i = f3(i); // Обе переменные i – локальные

printf(" 4: i=%d , n=%d\n",i,n); // i=29, n=14

}

//–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

int f1(int i) { // Параметр функции i – локальная

int n = 5; // n – локальная

n+=i;

return n;

}

//–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

int f2(int n) { // Параметр функции n – локальная

n+=3;

return n;

}

//–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

int f3(int i) {

n+=2; // n – глобальная

return i+n;

}

 

Существуют следующие области действия: блок, файл, функция, прототип функции, область структурированных типов данных.

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

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

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

Прототип функции. Идентификаторы, указанные в списке параметров прототипа (декларации) функции, имеют областью действия только прототип функции.

Структурированный тип данных. Элементы структур и объединений являются видимыми лишь в их пределах. Они образуются при создании переменной указанного типа и разрушаются при ее уничтожении.

В языке С++ допускается в разных блоках программы использовать один и тот же идентификатор для разных объектов. Декларация такого идентификатора внутри блока скрывает доступ к ранее объявленному, например:

void main(void)

{

int a = 3;

printf(“\n Block 1: %d “, a); {

double a = 2.5;

printf( “\n Block 2: %lf “, a); {

char a = ‘A’;

printf( “\n Block 3: %c “, a);

}

printf( “\n New Block 2: %lf“, a+1.25);

}

printf( “\n New Block 1: %d“, ++a);

}

Результат программы:

Block 1: 3

Block 2: 2.5

Block 3: A

New Block 2: 3.75

New Block 1: 4

 

 



Дата добавления: 2017-10-04; просмотров: 1021;


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

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

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

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.