COHERENT manpages
This page displays the COHERENT manpage for stdarg.h [Header for variable numbers of arguments].
List of available manpages
Index
stdarg.h -- Header File Header for variable numbers of arguments #include <stdarg.h> stdarg.h is the header file that ANSI C uses to declare and define the routines that traverse a variable-length argument list. It declares the type va_list and defines the macros va_arg(), va_start(), and va_end(). Example The following example concatenates multiple strings into a common allocated string and returns the string's address. method of handling variable arguments: #include <stdarg.h> #include <stdlib.h> #include <stddef.h> #include <stdio.h> char * multcat(numargs) int numargs; { va_list argptr; char *result; int i, siz; /* get size required */ va_start(argptr, numargs); for(siz = i = 0; i < numargs; i++) siz += strlen(va_arg(argptr, char *)); if ((result = calloc(siz + 1, 1)) == NULL) { fprintf(stderr, "Out of space\n"); exit(EXIT_FAILURE); } va_end(argptr); va_start(argptr, numargs); for(i = 0; i < numargs; i++) strcat(result, va_arg(argptr, char *)); va_end(argptr); return(result); } int main() { printf(multcat(5, "One ", "two ", "three ", "testing", ".\n")); } See Also header files, varargs.h ANSI Standard, §7.8 Notes The routines defined in <stdarg.h> were first implemented under UNIX System V, where they are declared in the header file <varargs.h>. The ANSI C committee recognized the usefulness of <varargs.h>, but decided that it had semantic problems. In particular, <varargs.h> introduced the notion of declaring ``...'' for the variable-arguments argument list in the function prototype. This, unfortunately, left them with declarations of the form void error(...) { whatever } and no obvious hook for accessing the parameter list within the body of the function. So, the ANSI committee changed the header declaration: it insisted on one or more formal parameters, followed by the list of variables. The committee had the wisdom to change the name of its header file, hence <stdarg.h> came into being. Unfortunately, the committee kept the same macro names, but in one macro (va_start()) changed the number of arguments it takes. COHERENT includes both <varargs.h> and <stdarg.h>, to support both ANSI and System-V code.