Retro video games delivered to your door every month!
Click above to get retro games delivered to your door ever month!
X-Hacker.org- Watcom C/C++ v10.0 : C library - <b>synopsis:</b> http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
Synopsis:
    #include <stdarg.h>
    type va_arg( va_list param, type );

Description:
     va_arg is a macro that can be used to obtain the next argument in a
    list of variable arguments.  It must be used with the associated macros
     va_start and  va_end.  A sequence such as


             va_list curr_arg;
             type next_arg;

             next_arg = va_arg( curr_arg, type );

    causes next_arg to be assigned the value of the next variable argument.
     The type is the type of the argument originally passed.

    The macro  va_start must be executed first in order to properly
    initialize the variable next_arg and the macro  va_end should be
    executed after all arguments have been obtained.

    The data item curr_arg is of type  va_list which contains the
    information to permit successive acquisitions of the arguments.

Returns:
    The macro returns the value of the next variable argument, according to
    type passed as the second parameter.

See Also:
    va_end, va_start, vfprintf, vprintf, vsprintf

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

    void test_fn( const char *msg,
                  const char *types,
                  ... );

    void main()
      {
        printf( "VA...TEST\n" );
        test_fn( "PARAMETERS: 1, \"abc\", 546",
                 "isi", 1, "abc", 546 );
        test_fn( "PARAMETERS: \"def\", 789",
                 "si", "def", 789 );
      }

    static void test_fn(
      const char *msg,   /* message to be printed    */
      const char *types, /* parameter types (i,s)    */
      ... )              /* variable arguments       */
      {
        va_list argument;
        int   arg_int;
        char *arg_string;
        const char *types_ptr;

        types_ptr = types;
        printf( "\n%s -- %s\n", msg, types );
        va_start( argument, types );
        while( *types_ptr != '\0' ) {
          if (*types_ptr == 'i') {
            arg_int = va_arg( argument, int );
            printf( "integer: %d\n", arg_int );
          } else if (*types_ptr == 's') {
            arg_string = va_arg( argument, char * );
            printf( "string:  %s\n", arg_string );
          }
          ++types_ptr;
        }
        va_end( argument );
      }

    produces the following:

    VA...TEST

    PARAMETERS: 1, "abc", 546 -- isi
    integer: 1
    string:  abc
    integer: 546

    PARAMETERS: "def", 789 -- si
    string:  def
    integer: 789

Classification:
    ANSI

Systems:
    MACRO

Online resources provided by: http://www.X-Hacker.org --- NG 2 HTML conversion by Dave Pearson