# va_start

From cppreference.com
< cpp‎ | utility‎ | variadic

Defined in header `<cstdarg>` |  |
void va_start( va_list ap, parm_n ); |  |

The `va_start` macro enables access to the variable arguments following the named argument `parm_n`.

`va_start` should be invoked with an instance to a valid va_list object `ap` before any calls to va_arg.

If `parm_n` is declared with reference type or with a type not compatible with the type that results from default argument promotions, the behavior is undefined.

### Parameters

ap | - | an instance of the va_list type
parm_n | - | the named parameter preceding the first variable parameter

### Expanded value

(none)

### Notes

`va_start` is required to support `parm_n` with overloaded `operator&`.

### Example

Run this code

    #include <iostream>
    #include <cstdarg>

    int add_nums(int count, ...)
    {
        int result = 0;
        va_list args;
        va_start(args, count);
        for (int i = 0; i < count; ++i) {
            result += va_arg(args, int);
        }
        va_end(args);
        return result;
    }

    int main()
    {
        std::cout << add_nums(4, 25, 25, 50, 50) << '\n';
    }

Output:

    150

### See also

va_arg | accesses the next variadic function argument (function macro)
va_end | ends traversal of the variadic function arguments (function macro)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/variadic/va_start&oldid=80499"