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

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

void f1(int a, double b, …);

Такая запись указывает компилятору на то, что за обязательными фактическими аргументами для параметров a и b могут следовать, а могут и не следовать другие аргументы при вызове этой функции.

Перечислим основные особенности использования данного механизма.

1. Используется несколько макрокоманд для доступа к параметрам таких функций, это:

va_list и va_start – макрокоманды подготовки доступа к параметрам;

va_arg – использование параметров;

va_end – отчистка перед выходом.

Они объявлены в заголовочном файле stdarg.h.

2. Такая функция должна иметь минимум один параметр (именованный) для передачи ей количества передаваемых аргументов.

3. Для макроса va_start необходимо передать два аргумента – имя списка параметров, который задает va_list и их количество.

4. Нарушать указанный порядок макрокоманд нельзя. Иначе можно получить непредсказуемые последствия.

5. Для макроса va_arg нужно помимо имени списка параметров передать и предполагаемый тип. При несоответствии типов – ошибка.

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

Следующий пример иллюстрирует эту возможность.

#include <stdarg.h>

#include <stdio.h>

void f1(double s, int n ...) {

int v;

va_list p;

va_start(p, n);

printf(" \n Double S = %lf ", s);

for(int i=1; i<=n; i++) {

v = va_arg(p, int);

printf("\n Argument %d = %d ", i, v);

}

va_end(p);

}

void main(void) {

f1(1.5, 3, 4, 5, 6);

}

В результате получим:

Double S = 1.500000

Argument 1 = 4

Argument 2 = 5

Argument 3 = 6

Press any key to continue

 








Дата добавления: 2014-12-30; просмотров: 895;


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

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

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

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