Все это время я продолжал использовать printf и писать функции, но никогда особо не задумывался о том, что printf принимает столько аргументов, сколько вы хотите. Как насчет того, чтобы написать функцию, которая будет делать то же самое?
Файл заголовка, который мы собираемся использовать, - это cstdarg в C ++ и stdarg.h в C. Этот заголовок предоставляет нам один тип и несколько макросов для обработки списка аргументов.
- va_list : тип для хранения списка аргументов
- va_start : макрос для инициализации списка аргументов
- va_end: макрос для завершения использования списка аргументов
- va_arg: макрос для получения следующего аргумента в ??? да еще раз .. список аргументов.
Давайте использовать их в функции для лучшего понимания.
Все еще не понятно, как их использовать? Вот как запустить функцию -
return_type имя (декларация_параметров,…)
Теперь у нас есть некоторая информация об аргументах, мы объявляем переменную так же, как мы объявляем int a.
va_list имя_списка
va_start (имя_списка, тип)
va_start инициализирует этот список так же, как мы инициализируем некоторую переменную a = 10
va_arg (имя_списка, тип)
Макрос va_arg работает как указатель, который указывает на следующий элемент в списке. Здесь следует отметить, что он не знает, когда закончить поиск следующего элемента, поэтому мы должны позаботиться об этом в функции. Для этого мы использовали количество элементов в качестве первого аргумента.
va_arg () принимает «список» и «тип» в качестве параметров, он не знает тип самого списка, он возвращает любой «тип», который мы передаем.
va_end (имя_списка)
va_end () как бы завершает функцию, чтобы она возвращала результат в обычном режиме.
Я не вдавался в подробности. Это просто простая иллюстрация, чтобы понять идею. Таким же образом мы можем найти максимум, минимум.
Продолжайте кодировать, продолжайте исследовать!