====== stdarg.h ======
Для определения параметров неопределенной длины в таких функциях используется многоточие:
''тип имя_функции(обязательные параметры, ...)''
При этом надо учитывать, что функция должна иметь как минимум один обязательный параметр.
в заглоловочном файле ''stdarg.h'' определены специальные макрокоманды:
va_start();
va_arg();
va_end();
Макрос ''va_start'' имеет следующее определение:
void va_start(va_list param, последний_явный_параметр);
Первый параметр макроса - param связывает объект va_list с первым необязательным параметром. Для его определения в качестве второго параметра в макрос передается последний обязательный параметр функции. Таким образом, используя последний обязательный параметр, мы можем нацелить объект va_list на адрес первого необязательного параметра. То есть фактически va_list выступает в данной роли как указатель.
Макрос ''va_arg'' имеет следующее определение:
type va_arg(va_list param, type);
Этот макрос позволяет получить значение параметра типа type, а также переместить указатель va_list на следующий необязательный параметр.
Макрос ''va_end'' позволяет выйти из функции с переменным списком параметров. Она имеет следующее определение:
void va_end(va_list param);
В качестве параметра va_end принимает указатель va_start, который ранее был задействован в макросах va_start и va_arg.
Пример:
#include
#include
int sum(int n, ...) {
int result = 0;
va_list factor; //указатель va_list
va_start(factor, n); // устанавливаем указатель
for(int i=0;i