Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
14
Добавлен:
12.02.2015
Размер:
236.66 Кб
Скачать

Макросредства для переменного числа параметров.

Макрокоманды, обеспечивающие независящий от реализации компилятора способ доступа к конкретным спискам фактических параметров переменной длины имеют формат: (необходимо подключить stdarg.h)

Также определен специальный тип данных va_list. Такой тип должны иметь переменные, используемые при обращении к данным макрокомандам. При обращении к макросу va_arg() необходимо в качестве 2 - го параметра использовать обозначение типа type очередного параметра к которому выполняется доступ.

Порядок использования перечисленных макросредств в теле функции.

IСначало в теле функции определяется объект типа va_list. Например так:

va_list factor ;

Определенный таким образом объект обладает свойствами указателя.

Порядок использования перечисленных макросредств в теле функции.

IСначало в теле функции определяется объект типа va_list. Например так:

va_list factor ;

Определенный таким образом объект обладает свойствами указателя.

IС помощью макроса va_start объект factor связывается с 1 - м необязательным параметром. Для этого используется последний явный параметр (last):

va_start(factor , last);

Порядок использования перечисленных макросредств в теле функции.

IСначало в теле функции определяется объект типа va_list. Например так:

va_list factor ;

Определенный таким образом объект обладает свойствами указателя.

IС помощью макроса va_start объект factor связывается с 1 - м необязательным параметром. Для этого используется последний явный параметр (last):

va_start(factor , last);

IТеперь с помощью разыменования указателя factor мы можем получить значение 1 - го фактического параметра из переменного списка. При этом также необходимо передать в функцию тип этого параметра.

IЕсли определен тип factor очередного параметра, то обращение к макросу

va_arg(factor , type);

позволяет получить значение очередного фактического параметра типа type, а также изменить значение указателя factor на адрес следующего параметра списка.

IЕсли определен тип factor очередного параметра, то обращение к макросу

va_arg(factor , type);

позволяет получить значение очередного фактического параметра типа type, а также изменить значение указателя factor на адрес следующего параметра списка.

IТеперь узнав тип следующего параметра (к примеру type1) можно вновь обратиться к макросу va_arg(factor , type1); и т.д.

IЕсли определен тип factor очередного параметра, то обращение к макросу

va_arg(factor , type);

позволяет получить значение очередного фактического параметра типа type, а также изменить значение указателя factor на адрес следующего параметра списка.

IТеперь узнав тип следующего параметра (к примеру type1) можно вновь обратиться к макросу va_arg(factor , type1); и т.д.

IПосле обработки всего списка параметров, для корректного возврата из функции используется макрокоманда va_end: va_end(factor );

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

Программа аналог функции printf. Для простоты будем использовать спецификаторы только %d и %f.

Соседние файлы в папке лекции проги