Все это время я продолжал использовать 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 () как бы завершает функцию, чтобы она возвращала результат в обычном режиме.

Я не вдавался в подробности. Это просто простая иллюстрация, чтобы понять идею. Таким же образом мы можем найти максимум, минимум.

Продолжайте кодировать, продолжайте исследовать!