Annotation of 43BSDReno/share/man/man3/varargs.3, revision 1.1

1.1     ! root        1: .\" Copyright (c) 1990 The Regents of the University of California.
        !             2: .\" All rights reserved.
        !             3: .\"
        !             4: .\" Redistribution and use in source and binary forms are permitted
        !             5: .\" provided that: (1) source distributions retain this entire copyright
        !             6: .\" notice and comment, and (2) distributions including binaries display
        !             7: .\" the following acknowledgement:  ``This product includes software
        !             8: .\" developed by the University of California, Berkeley and its contributors''
        !             9: .\" in the documentation or other materials provided with the distribution
        !            10: .\" and in all advertising materials mentioning features or use of this
        !            11: .\" software. Neither the name of the University nor the names of its
        !            12: .\" contributors may be used to endorse or promote products derived
        !            13: .\" from this software without specific prior written permission.
        !            14: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
        !            15: .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
        !            16: .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        !            17: .\"
        !            18: .\"    @(#)varargs.3   6.4 (Berkeley) 5/14/90
        !            19: .\"
        !            20: .TH VARARGS 3  "May 14, 1990"
        !            21: .AT 3
        !            22: .SH NAME
        !            23: varargs \- variable argument lists
        !            24: .SH SYNOPSIS
        !            25: .nf
        !            26: .ft B
        !            27: #include <stdarg.h>
        !            28: 
        !            29: void
        !            30: va_start(va_list ap, last);
        !            31: 
        !            32: type
        !            33: va_arg(va_list ap, type);
        !            34: 
        !            35: void
        !            36: va_end(va_list ap);
        !            37: .ft R
        !            38: .fi
        !            39: .SH DESCRIPTION
        !            40: A function may be called with a varying number of arguments of varying
        !            41: types.
        !            42: The include file
        !            43: .I <stdarg.h>
        !            44: declares a type (\fIva_list\fP) and defines three macros for stepping
        !            45: through a list of arguments whose number and types are not known to
        !            46: the called function.
        !            47: .PP
        !            48: The called function must declare an object of type
        !            49: .I va_list
        !            50: which is used by the macros
        !            51: .IR va_start ,
        !            52: .IR va_arg ,
        !            53: and
        !            54: .IR va_end .
        !            55: .PP
        !            56: The
        !            57: .I va_start
        !            58: macro initializes
        !            59: .I ap
        !            60: for subsequent use by
        !            61: .I va_arg
        !            62: and
        !            63: .IR va_end ,
        !            64: and must be called first.
        !            65: .PP
        !            66: The parameter
        !            67: .I last
        !            68: is the name of the last parameter before the variable argument list,
        !            69: i.e. the last parameter of which the calling function knows the type.
        !            70: .PP
        !            71: Because the address of this parameter is used in the
        !            72: .I va_start
        !            73: macro, it should not be declared as a register variable, or as a
        !            74: function or array type.
        !            75: .PP
        !            76: The
        !            77: .I va_start
        !            78: macro returns no value.
        !            79: .PP
        !            80: The
        !            81: .I va_arg
        !            82: macro expands to an expression that has the type and value of the next
        !            83: argument in the call.
        !            84: The parameter
        !            85: .I ap
        !            86: is the 
        !            87: .I va_list ap
        !            88: initialized by
        !            89: .IR va_start .
        !            90: Each call to 
        !            91: .I va_arg 
        !            92: modifies
        !            93: .I ap
        !            94: so that the next call returns the next argument.
        !            95: The parameter
        !            96: .I type
        !            97: is a type name specified so that the type of a pointer to an
        !            98: object that has the specified type can be obtained simply by 
        !            99: adding a 
        !           100: .I *
        !           101: to
        !           102: .IR type .
        !           103: .PP
        !           104: If there is no next argument, or if
        !           105: .I type
        !           106: is not compatible with the type of the actual next argument
        !           107: (as promoted according to the default argument promotions),
        !           108: random errors will occur.
        !           109: .PP
        !           110: The first use of the
        !           111: .I va_arg
        !           112: macro after that of the 
        !           113: .I va_start 
        !           114: macro returns the argument after 
        !           115: .IR last .
        !           116: Successive invocations return the values of the remaining
        !           117: arguments.
        !           118: .PP
        !           119: The
        !           120: .I va_end
        !           121: macro handles a normal return from the function whose variable argument
        !           122: list was initialized by 
        !           123: .IR va_start .
        !           124: .PP
        !           125: The
        !           126: .I va_end
        !           127: macro returns no value.
        !           128: .SH STANDARDS
        !           129: The
        !           130: .IR va_start ,
        !           131: .IR va_arg ,
        !           132: and
        !           133: .I va_end
        !           134: macros are ANSI C compatible.
        !           135: .SH COMPATIBILITY
        !           136: These macros are
        !           137: .B not
        !           138: compatible with the historic macros they replace.
        !           139: A backward compatible version can be found in the include
        !           140: file 
        !           141: .IR <varargs.h> .
        !           142: .SH EXAMPLES
        !           143: The function
        !           144: .I foo
        !           145: takes a string of format characters and prints out the argument
        !           146: associated with each format character based on the type.
        !           147: .sp
        !           148: .nf
        !           149: .RS
        !           150: foo(fmt)
        !           151:        char *fmt;
        !           152: {
        !           153:        va_list ap;
        !           154:        int d;
        !           155:        char c, *p, *s;
        !           156: 
        !           157:        va_start(ap, fmt);
        !           158:        while (*fmt)
        !           159:                switch(*fmt++) {
        !           160:                case 's':                       /* string */
        !           161:                        s = va_arg(ap, char *);
        !           162:                        printf("string %s\en", s);
        !           163:                        break;
        !           164:                case 'd':                       /* int */
        !           165:                        d = va_arg(ap, int);
        !           166:                        printf("int %d\en", d);
        !           167:                        break;
        !           168:                case 'c':                       /* char */
        !           169:                        c = va_arg(ap, char);
        !           170:                        printf("char %c\en", c);
        !           171:                        break;
        !           172:                }
        !           173:        va_end(ap);
        !           174: }
        !           175: .fi

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.