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.

	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 three 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 case,
	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 own function
	calls, use the efun apply(); e.g.:

	  apply(#'call_out, 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)
