Пример работы функции с переменным количеством переменных (Описание различных средств (библиотек_ языков_ и пр.))
Описание файла
Файл "Пример работы функции с переменным количеством переменных" внутри архива находится в следующих папках: Описание различных средств (библиотек_ языков_ и пр.), Пример функции с переменным количеством параметров. Документ из архива "Описание различных средств (библиотек_ языков_ и пр.)", который расположен в категории "". Всё это находится в предмете "системное программное обеспечение (спо)" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "Пример работы функции с переменным количеством переменных"
Текст из документа "Пример работы функции с переменным количеством переменных"
Пример работы функции с переменным количеством аргументов.
#include <stdio.h>
#include <stdarg.h>
void sum(char *msg, ...)
{
va_list arguments;
int arg;
int result;
va_start(arguments, msg);
result = 0;
while ((arg = va_arg(arguments, int)) != 0) {
result += arg;
}
printf(msg, result);
va_end(arguments);
}
int main()
{
sum(" 1 + 2 + 3 + 4 = %d\n", 1, 2, 3, 4, 0);
return 1;
}
Назначение
Позволяет использовать переменный список аргументов.
Синтаксис
#include <stdarg.h>
void va_start(va_list param, start_arg);
type va_arg(va_list param, type);
void va_end(va_list param);
Замечания
Макросы семейства va_... позволяют осуществить доступ к переменному списку аргументов. Эти макросы используются для
поэлементной обработки списка аргументов, когда вызываемой функции неизвестно ни количество, ни типы передаваемых ей аргументов.
Файл-заголовок stdarg.h содержит описание одного типа (va_list) и трех макросов (va_start, va_arg, va_end).
va_list
-------
Внутренняя структура, содержащая информацию для работы va_start, va_arg и va_end.
va_start
--------
Этот макрос сохраняет в структуре param значение указателя на первый элемент списка аргументов, который будет передан функции.
va_start имеет два параметра: param и start_arg
*) param - внутренняя структура;
*) start_arg - имя фиксированного параметра (последнего, если их несколько), передаваемого вызываемой функции.
va_start должна быть вызвана до первого обращения к va_arg или va_end.
va_arg
------
Возвращает аргументы списка.
Этот макрос расширяется в выражение, которое имеет тот же тип и значение, что и следующий аргумент type, который должен быть передан функции (один из аргументов переменного списка). Переменная param в va_arg должна быть той же самой переменной param, которая инициализировалась в va_start.
При первом обращении к va_arg, она возвращает первый аргумент списка. При каждом последующем обращении к va_arg, она будет возвращать следующий аргумент из списка. Она осуществляет это посредством использования первого значения param, после чего значение param увеличивается до значения указателя на следующий элемент. va_arg использует аргумент type как для получения текущего элемента, так и для коррекции указателя на следующий элемент. При каждом обращении к va_arg она изменяет значение указателя param так, чтобы он указывал на следующий аргумент списка.
va_end
------
Обеспечивает нормальное завершение работы.
va_end должен быть вызван после того, как va_arg прочитает все аргументы списка; игнорирование этого может послужить причиной странного и непредвиденного поведения вашей программы из-за «порчи» param.