Функции с переменным количеством аргументов
Материал из 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 по функциям с переменным количеством аргументов
|