Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_po_poryadku_proga.doc
Скачиваний:
4
Добавлен:
15.04.2019
Размер:
1.07 Mб
Скачать

18. Функции и разработка программ

18.1. Функции с переменным количеством параметров

В языке C допускаются функции с переменным количеством параметров. В этом случае в конце списка параметров ставится “…” При этом предполагается, что явно указан хотя бы один параметр. int print (int n, char * str , …);

Для обработки функции с переменным количеством параметров используется переменная типа va_list и три макрокоманды из библиотеки stdarg.h: va_start ( va_list ap , last_arg); Инициализирует параметр ap , где last_arg – последний известный фиксированный элемент функции.

type va_arg (va_list ap, type); Возвращает следующий аргумент типа type, ap должен быть предварительно инициализирован макрокомандой va_start; void va_end (va_last ap); Обеспечивает правильную работу инструкции return, после вызова va_end работа макрокоманды va_arg невозможна.

18.2. Глобальные и локальные переменные, область видимости и время существования.

Если переменная объявлена вне какой-либо функции, то она называется глобальной. Если переменная объявлена внутри функции, то она называется локальной

Область видимости и время существования переменной определяются спецификаторами классов памяти.

Aвтоматические переменные auto существуют - временно, область действия - локальная;

Глобальная переменная с определенным именем может быть определена единожды, продолжительность существования внешней переменной постоянная, область действия глобальная (все файлы)

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

Регистровые переменные запоминаются в регистрах центрального процессора. Спецификатор static можно применять только в локальных переменных и параметрах функций.

18.3. Спецификаторы классов памяти.

Спецификаторы классов памяти указывают как долго должна храниться объявленная переменная и определяют область видимости этой переменной. Существуют 4 спецификатора классов памяти: ·  auto · extern · static   ·  register.

Автоматические переменные аuto указывает, что переменная, определенная внутри функции, является локальной. Этот спецификатор используется по умолчанию. Aвтоматические переменные существуют - временно, область действия - локальная; Переменная, описанная вне функции, является внешней. Extern указывает, что переменная является глобальной и определена в другом файле программы. Глобальная переменная с определенным именем может быть определена единожды, продолжительность существования внешней переменной постоянная, область действия глобальная (все файлы)

Static для глобальной переменной ограничивает область её видимости только файлом, в котором она определена; для локальной – сохраняет её и значение до конца работы, это означает, что такие переменные остаются в работе.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]