Пространства имён
Варианты
Действия

va_arg

Материал из cppreference.com
< cpp‎ | utility‎ | variadic

Определено в заголовочном файле <cstdarg>
T va_arg(va_list ap, T);
va_arg макрос заменяется на выражение типа T, что соответствует следующему параметру от va_list ap.
Оригинал:
The va_arg macro expands to an expression of type T that corresponds to the next parameter from the va_list ap.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Перед вызовом va_arg, ap должны быть инициализированы путем вызова либо va_start или va_copy, без промежуточного вызова va_end. Каждый вызов макроса va_arg изменяет ap, чтобы указать на следующий аргумент переменной.
Оригинал:
Prior to calling va_arg, ap must be initialized by a call to either va_start or va_copy, with no intervening call to va_end. Each invocation of the va_arg macro modifies ap to point to the next variable argument.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если va_arg вызывается, когда нет больше аргументов в ap, или если тип следующего аргумента в ap (после акции) не совместима с T, поведение не определено, если:
Оригинал:
If va_arg is called when there are no more arguments in ap, or if the type of the next argument in ap (after promotions) is not compatible with T, the behavior is undefined, unless:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • один тип целое число типа, другой тип соответствующее целое число без знака типа, а значение представляется в обоих типах, или
    Оригинал:
    one type is a signed integer type, the other type is the corresponding unsigned integer type, and the value is representable in both types; or
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • один тип указателя на void, а другой указатель на символ типа.
    Оригинал:
    one type is pointer to void and the other is a pointer to a character type.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

[править] Параметры

ap -
Экземпляр va_list типа
Оригинал:
an instance of the va_list type
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
T -
тип следующего параметра в ap
Оригинал:
the type of the next parameter in ap
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Расширенное значение

Следующая переменная параметр в ap
Оригинал:
the next variable parameter in ap
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Пример

#include <iostream>
#include <cstdarg>
#include <cmath>
 
double stddev(int count, ...)
{
    double sum = 0;
    double sum_sq = 0;
    va_list args;
    va_start(args, count);
    for (int i = 0; i < count; ++i) {
        double num = va_arg(args, double);
        sum += num;
        sum_sq += num*num;
    }
    return std::sqrt(sum_sq/count - (sum/count)*(sum/count));
}
 
int main()
{
    std::cout << stddev(4, 25.0, 27.3, 26.9, 25.7) << '\n';
}

Вывод:

0.920258

[править] См. также

позволяет получить доступ к переменным числом аргументов функции
Оригинал:
enables access to variadic function arguments
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция-макрос) [edit]
(C++11)
makes a copy of the variadic function arguments
(функция-макрос) [edit]
заканчивается обход переменным числом аргументов функции
Оригинал:
ends traversal of the variadic function arguments
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция-макрос) [edit]