Функції із змінним числом параметрів
Інколи у функції потрібно передати деяке число фіксованих параметрів та невизначене число додаткових. В цьому випадку опис функції буде мати вигляд :
тип ім'я_функції(список параметрів, ...)
Список аргументів включає в себе скінченне число обов'язкових параметрів (цей список не може бути порожнім), після якого на місці невизначеного числа параметрів ставиться три крапки. Для роботи з цими параметрами у файлі stdarg.h визначений тип списку va_list і три макроси: va_start, va_arg, va_end.
Макрос va_start має синтаксис :
void va_start(va_list ap, lastfix);.
Цей макрос починає роботу зі списком, встановлюючи його покажчик ap на перший аргумент зі списку аргументів з невизначеним числом.
Макрос va_arg має синтаксис :
void va_arg(va_list ap, type);.
Цей макрос повертає значення наступного (чергового) аргументу зі списку. Перед викликом va_arg значення ap повинне бути встановлене викликом va_start або va_arg. Кожний виклик va_arg переводить покажчик на наступний аргумент.
Макрос va_end має синтаксис :
void va_end(va_list ap);.
Приклад 10. Даний макрос завершує роботу зі списком, звільняючи пам'ять.
#include <stdio.h>
#include <stdarg.h>
void sum(char *msg, ...)
{
int total = 0;
va_list ap;
int arg;
va_start(ap, msg);
while ((arg = va_arg(ap,int)) != 0)
{
total += arg;
}
printf(msg, total);
va_end(ap);
}
int main()
{
sum("Сума 1+2+3+4 дорівнює %d\n", 1,2,3,4,0);
return 0;
}