Функции с переменным количеством аргументов
Материал из cppreference.com
Функции с переменным количеством аргументов (напр. std::printf) принимают переменное количество аргументов.
Для объявления функции с переменным количеством аргументов используется многоточие после списка параметров, напр. int printf(const char* format...);, перед которым может опционально стоять запятая. См. переменное количество аргументов для дополнительных деталей по синтаксису, автоматическому преобразованию аргументов и альтернативам.
Для доступа к таким аргументам из тела функции предоставляются следующие средства библиотеки:
Определены в заголовочном файле
<cstdarg> | |
| разрешает доступ к аргументам функции с переменным числом аргументов (функция-макрос) | |
| обращается к следующему аргументу функции с переменным числом аргументов (функция-макрос) | |
(C++11) |
делает копию аргументов функции с переменным числом аргументов (функция-макрос) |
| завершает обход аргументов функции с переменным числом аргументов (функция-макрос) | |
| содержит информацию, необходимую для va_start, va_arg, va_end и va_copy (класс) | |
Пример
Запустить этот код
#include <iostream>
#include <cstdarg>
void simple_printf(const char* fmt...) // в стиле C "const char* fmt, ..." также допустимо
{
va_list args;
va_start(args, fmt);
while (*fmt != '\0') {
if (*fmt == 'd') {
int i = va_arg(args, int);
std::cout << i << '\n';
} else if (*fmt == 'c') {
// обратите внимание: автоматическое преобразование к целому типу
int c = va_arg(args, int);
std::cout << static_cast<char>(c) << '\n';
} else if (*fmt == 'f') {
double d = va_arg(args, double);
std::cout << d << '\n';
}
++fmt;
}
va_end(args);
}
int main()
{
simple_printf("dcff", 3, 'a', 1.999, 42.5);
}
Вывод:
3
a
1.999
42.5
См. также
Документация C по функциям с переменным количеством аргументов
|