CONCEPT
    varargs

DESCRIPTION
    A function uses "varargs", short for "variable arguments", if
    it intentionally may be called with less or more arguments
    than formally specified.

    The proper order to define a function call is:

        [ modifier ] [ varargs ] [ return type ] function( args...)

     Any other order will result in an error.


    Given a function definition like this:

        void fun (string arg1, int arg2, int arg3)

    fun() has to be called with exactly three parameters: one
    string and two integers.


    If the function is defined as

        varargs void fun (string arg1, int arg2, int arg3)

    it is possible to call the function with just arg1, or arg1
    and arg2. The remaining unspecified arguments (arg2 and arg3,
    resp. arg3) are in these cases assumed to be 0.


    To pass more arguments than specified, the functions last
    parameter must be defined as following:

        void fun (string arg1, int arg2, varargs int * arg3)

    This allows fun() to be called with two or more arguments.
    The arguments, except those assigned to the other parameters,
    in this case arg1 and arg2, and collected into an array which
    is then passed as arg3. For example

        fun("foo", 1)       -> arg3 == ({ })
        fun("foo", 1, 2)    -> arg3 == ({ 2 })
        fun("foo", 1, 2, 3) -> arg3 == ({ 2, 3 })

    The type of the varargs argument has to be an array of the
    expected type (int*, object*, string*, ...); in this example,
    only integers are allowed. To accept arguments of any kind,
    define the parameter as 'varargs mixed' or 'varargs mixed*'.

    To 'flatten' the received argument array in your own function
    calls, use the efun apply(); e.g.:

        apply(#'call_out, "bar", 1, arg3)

    or the 'flatten arguments' operator:

       call_out("bar", 1, arg3...)

    The two varargs variants can of course be combined:

        varargs void fun (string arg1, int arg2, varargs int* arg3)

    defines a function which may be called with any number of
    arguments.


HISTORY
    The possibility to pass more arguments than formally specified
    was introduced in 3.2.1@132. Before, the excess arguments were
    silently ignored.

SEE ALSO
    pragma(LPC), apply(E), modifiers(LPC)
