Программирование на C и C++

Онлайн справочник программиста на C и C++

va_start, va_end, va_arg

void va_start(va_list argptr, last_parm)

void va_end(va_list argptr)

void va_arg(va_list argptr, type)

Прототип: 
Описание: 

Макросы va_arg(), va_start() и va_end() используются совместно для того, чтобы осуществить передачу функции переменного числа параметров. Наиболее общеупотребительным примером ис­пользования функции с переменным числом параметров служит printr(). Тип va_list определен в файле stdarg.h.

Общая процедура создания функции, которая имеет переменное число аргументов, заключает­ся в следующем: функция должна иметь один или более известных параметров. Эти известные параметры следуют перед списком переменных параметров. Самый правый известный параметр называется last_parm. Имя last_parm используется в качестве второго параметра в вызове va_start(). Прежде чем осуществлять доступ к какому-либо из переменных параметров, должен быть иници­ализирован указатель argptr, для чего используется вызов va_start(). После этого параметры воз­вращаются с помощью вызова функции va_arg() с параметром type, являющимся типом следующе­го параметра. Наконец, после того, как все параметры прочитаны, перед тем как выйти из функции, необходимо вызвать функцию va_end(), что гарантирует правильное восстановление стека. Если функция va_end() не вызвана, то возникает аварийная ситуация.

Пример: 
 

Смешанные функции