Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по С,С++.doc
Скачиваний:
28
Добавлен:
25.04.2019
Размер:
694.78 Кб
Скачать
  1. Статистические внешние переменные - static

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

static int num;

void main (void){

int count;

for (count=1; count<5; count ++){

printf ("%d\n", count);

fun ();

}

}

void fun (void){

int i=1;

num ++;

printf ("%d %d\n", i, num);

}

11.2.Локальные переменные

  1. Внутренняя статическая переменная

Ключевое слово static. Объявляется и определяется внутри одной функции, блока. Инициализируют 0 на стадии компиляции. Создаётся в области данных. Время жизни - работа всей программы, но область видимости только эта функция. При многократном вызове сохраняет своё значение. Инициализирует только 1 раз.

void main (void){

int count;

for (count=1; count<5; count ++){

printf ("%d\n", count);

fun ();

}

}

void fun (void){

static int num;

int i=1;

printf ("%d %d\n", i, num++);

}

  1. Регистровая переменная

Ключевое слово register int i . Помещаются в регистры микропроцессора для увеличения скорости вычисления. Если нет свободного регистра, рассматриваются как автоматические. Область видимости блок, в котором были определены. По умолчанию не инициализируются.

  1. Автоматические переменные

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

Пример 1.

if (i==1){

int j=0;

int k=1;

i++;

}

printf(“%d %d”,j,k); //сообщение об ошибке

Пример 2.

int i;

......

{

int i; Внешнее i не видимо

......

}

...... Здесь опять ее видно

Существуют понятия: область видимости и область существования. Область видимости не может выходить за область существования, но область существования может превышать область видимости.

11.3.Доступ к функциям в многомодульной программе

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

Файл 1 Файл 2

Таблица 1. Классы памяти и инициализация

Класс

Хранения

Внешний

Extern

Внешний

Статический static

Аргумен. Функции

Автоматические auto

Регистровые

Register

Внурен. Статические

Static

Область действия

Программа

Модуль

Функция

Блок

Блок

Блок

Время

Жизни

Программа

Программа

Функция

Блок

Блок

Программа

Область

Хранения

Сегмент

Данных

Сегмент данных

Сегмент стека

Сегмент стека

Регистры МП

Сегмент данных

Инициал-емость объектов

Все

Все

Не раз-решена в Си

Все в С++

Все

Все

Момент инициализации

На стадии

Компил.

На стадии компил.

При входе в блок

При входе в блок

При входе в блок

На стадии компил.

Инициализация по умолчан.

Инициализируются 0

Инициализируются 0

Значение указывается

Значение не опред.

Значение не опред.

Инициализируется 0