Функции с переменным числом параметров
Многоточие в списке параметров пользовательской функции используется тогда, когда число аргументов заранее неизвестно. При этом неопределенное количество параметров можно указать в ее прототипе следующим образом:
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;