Макрос библиотеки C -va_end()

Стандартная библиотека C - <stdarg.h>

va_endЭтот макрос находится в стандартной библиотеке C<stdarg.h>макрос в заголовочном файле, используемый для очисткиva_listпеременную и сделать так, чтобы она больше не указывала ни на какую допустимую ячейку памяти. Он используется в конце функции с переменным числом аргументов для завершения обработки вариативных аргументов.

Макрос библиотеки Cvoid va_end(va_list ap)Позволяет использоватьva_startМакрос выполняет возврат из функции с переменным числом аргументов. Если он не вызван до возврата из функции...va_end, то результат не определён.

Объявление

Ниже приведено объявление макроса va_end().

void va_end(va_list ap);

Параметр

  • va_list ap: Этоva_listпеременные типа, которые уже были переданы черезva_startилиva_copyМакрос инициализирует и используется для доступа к списку переменных аргументов.

Возвращаемое значение

Этот макрос не возвращает никакого значения.

Шаги использования

  • В функции с переменным числом аргументов используйтеva_startинициализацию макросаva_listпеременной.
  • Использованиеva_argмакрос для последовательного извлечения каждого вариативного аргумента.
  • После обработки всех вариативных аргументов используйтеva_endМакрос очисткиva_listпеременной.

Пример

Ниже приведен пример использованияva_endПример программы для макроса, в которой определяется функция с переменным числом аргументов для вычисления суммы переменного числа аргументов:

Пример

#include <stdio.h>
#include <stdarg.h>

// Функция с переменным числом аргументов, вычисляет сумму аргументов
int sum(int count, ...) {
    int total = 0;
    va_list args;

    // Инициализировать args для доступа к вариативным аргументам
    va_start(args, count);

    // Получать каждый вариативный аргумент по одному и добавлять к total
    for (int i = 0; i < count; i++) {
        total += va_arg(args, int);
    }

    // Очистить args
    va_end(args);

    return total;
}

int main() {
    printf("Сумма 1, 2, 3: %d\n", sum(3, 1, 2, 3));  // Вывод 6
    printf("Сумма 4, 5, 6, 7: %d\n", sum(4, 4, 5, 6, 7));  // Вывод 22
    return 0;
}

Давайте скомпилируем и запустим вышеприведённую программу. Это даст следующий результат:

Sum of 1, 2, 3: 6
Sum of 4, 5, 6, 7: 22

Разбор

  • va_list args;: объявитеva_listпеременную типаargs, который используется для хранения информации о списке переменных аргументов.
  • va_start(args, count);: инициализируйтеargsдля доступа кcountвариативные аргументы, которые начинаются после этого.
  • total += va_arg(args, int);: Использоватьva_argМакрос получает следующий вариативный аргумент, предполагая здесь, что все они...intтип, и накапливает его вtotalв переменной.
  • va_end(args);: выполните очисткуargs, чтобы освободить ресурсы и избежать неопределённого поведения.

Примечания

  • Каждый раз, когда вы используетеva_startИнициализацияva_listпосле переменной, вы должны использоватьva_endОчистите его.
  • va_endМакрос используется для очисткиva_listпеременную, чтобы освободить все ресурсы и избежать возможных проблем с памятью перед возвратом из функции.
  • Вызовva_endПосле,va_listПеременная больше не будет действительной, и её не следует использовать снова.

Стандартная библиотека C - <stdarg.h>

Другие расширения