Макрос библиотеки 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 <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Переменная больше не будет действительной, и её не следует использовать снова.