Va Function Definition and VA macro
C language supports the VA function, which is an extension of C language. c ++ also supports the VA function, but it is not recommended in C ++.
The polymorphism introduced by C ++ can also be used to implement functions with variable parameter numbers. However, C ++ has completed the reload function.
It can only be a limited number of foreseeable parameters. In comparison, the VA function in C can define an infinite number.
C ++ is powerless in this respect. The advantages of VA functions are shown in
Simplicity and ease of use can simplify the code. C compiler in order to unify
The implementation on the platform and increased code portability provide a series of macros to shield the hardware environment from being different.
Difference.
In ansi c, VA macros are defined in stdarg. H. They include: va_list, va_start (), va_ar
G (), va_end ().
// Example 2: Calculate the sum of squares of any natural number:
Int sqsum (INT N1 ,...)
{
Va_list arg_ptr;
Int nsqsum = 0, n = N1;
Va_start (arg_ptr, N1 );
While (n> 0)
{
Nsqsum + = (N * n );
N = va_arg (arg_ptr, INT );
}
Va_end (arg_ptr );
Return nsqsum;
}
// Call time
Int nsqsum = sqsum (7, 2, 7, 11,-1 );
The prototype declaration format of variable parameter functions is:
Type vafunction (type arg1, type arg2 ,... );
Parameters can be divided into two parts: fixed parameters with fixed numbers and optional parameters with variable numbers. The function must at least
A fixed parameter. The declaration of a fixed parameter is the same as that of a common function. The number of optional parameters is unknown.
Use "... . The fixed parameters and optional parameters are the same as the parameter list of a function.
Let's take a look at the functions of each va_xxx using the simple example 2 above.
Va_list arg_ptr: defines a pointer to a variable number of parameter lists;
Va_start (arg_ptr, argn): sets the parameter list pointer arg_ptr to the first in the function parameter list.
Optional parameter. Description: argn is a fixed parameter located before the first optional parameter.
Fixed parameters ;... The order and sound of parameters in the function parameter list in the memory.
The order of time is the same. If the declaration of a va function is void va_test (char a, char B, c
Har C ,...), Then its fixed parameters are A, B, C, and the last fixed parameter argn is C. Therefore
Va_start (arg_ptr, c ).
Va_arg (arg_ptr, type): return the parameter specified by the pointer arg_ptr In the parameter list. The return type is Ty.
PE, and make the pointer arg_ptr point to the next parameter in the parameter list.
Va_copy (DEST, Src): the types of DeST and SRC are va_list. va_copy () is used to copy the parameter list.
Pointer to initialize DEST as SRC.
Va_end (arg_ptr): clears the parameter list. The parallel parameter pointer arg_ptr is invalid. Description: The pointer arg_pt.
After r is disabled, you can call va_start () and va_copy () to restore arg_ptr. Each call to va_st
After art ()/va_copy (), the corresponding va_end () must match. The parameter pointer can be in the parameter Column
The table is moved back and forth at will, but it must be in va_start ()... Within va_end.