0000: 3c 48 45 41 44 3e 0a 3c 54 49 54 4c 45 3e 20 56 <HEAD>.<TITLE> V
0010: 41 43 41 4c 4c 20 6d 61 6e 75 61 6c 20 70 61 67 ACALL manual pag
0020: 65 20 3c 2f 54 49 54 4c 45 3e 0a 3c 2f 48 45 41 e </TITLE>.</HEA
0030: 44 3e 0a 3c 42 4f 44 59 3e 0a 3c 48 31 3e 56 41 D>.<BODY>.<H1>VA
0040: 43 41 4c 4c 20 6d 61 6e 75 61 6c 20 70 61 67 65 CALL manual page
0050: 3c 2f 48 31 3e 0a 0a 3c 55 4c 3e 0a 3c 4c 49 3e </H1>..<UL>.<LI>
0060: 20 3c 41 20 48 52 45 46 3d 22 23 4e 61 6d 65 22 <A HREF="#Name"
0070: 3e 4e 61 6d 65 3c 2f 41 3e 0a 3c 4c 49 3e 20 3c >Name</A>.<LI> <
0080: 41 20 48 52 45 46 3d 22 23 53 79 6e 6f 70 73 69 A HREF="#Synopsi
0090: 73 22 3e 53 79 6e 6f 70 73 69 73 3c 2f 41 3e 0a s">Synopsis</A>.
00a0: 3c 4c 49 3e 20 3c 41 20 48 52 45 46 3d 22 23 44 <LI> <A HREF="#D
00b0: 65 73 63 72 69 70 74 69 6f 6e 22 3e 44 65 73 63 escription">Desc
00c0: 72 69 70 74 69 6f 6e 3c 2f 41 3e 0a 3c 4c 49 3e ription</A>.<LI>
00d0: 20 3c 41 20 48 52 45 46 3d 22 23 4e 6f 74 65 73 <A HREF="#Notes
00e0: 22 3e 4e 6f 74 65 73 3c 2f 41 3e 0a 3c 4c 49 3e ">Notes</A>.<LI>
00f0: 20 3c 41 20 48 52 45 46 3d 22 23 45 78 61 6d 70 <A HREF="#Examp
0100: 6c 65 22 3e 45 78 61 6d 70 6c 65 3c 2f 41 3e 0a le">Example</A>.
0110: 3c 4c 49 3e 20 3c 41 20 48 52 45 46 3d 22 23 53 <LI> <A HREF="#S
0120: 65 65 20 61 6c 73 6f 22 3e 53 65 65 20 61 6c 73 ee also">See als
0130: 6f 3c 2f 41 3e 0a 3c 4c 49 3e 20 3c 41 20 48 52 o</A>.<LI> <A HR
0140: 45 46 3d 22 23 42 75 67 73 22 3e 42 75 67 73 3c EF="#Bugs">Bugs<
0150: 2f 41 3e 0a 3c 4c 49 3e 20 3c 41 20 48 52 45 46 /A>.<LI> <A HREF
0160: 3d 22 23 50 6f 72 74 69 6e 67 22 3e 50 6f 72 74 ="#Porting">Port
0170: 69 6e 67 3c 2f 41 3e 0a 3c 4c 49 3e 20 3c 41 20 ing</A>.<LI> <A
0180: 48 52 45 46 3d 22 23 41 75 74 68 6f 72 22 3e 41 HREF="#Author">A
0190: 75 74 68 6f 72 3c 2f 41 3e 0a 3c 4c 49 3e 20 3c uthor</A>.<LI> <
01a0: 41 20 48 52 45 46 3d 22 23 41 63 6b 6e 6f 77 6c A HREF="#Acknowl
01b0: 65 64 67 65 6d 65 6e 74 73 22 3e 41 63 6b 6e 6f edgements">Ackno
01c0: 77 6c 65 64 67 65 6d 65 6e 74 73 3c 2f 41 3e 0a wledgements</A>.
01d0: 3c 2f 55 4c 3e 0a 3c 50 3e 0a 0a 3c 48 52 3e 0a </UL>.<P>..<HR>.
01e0: 0a 3c 41 20 4e 41 4d 45 3d 22 4e 61 6d 65 22 3e .<A NAME="Name">
01f0: 0a 3c 48 32 3e 4e 61 6d 65 3c 2f 48 32 3e 0a 3c .<H2>Name</H2>.<
0200: 2f 41 3e 0a 0a 76 61 63 61 6c 6c 20 2d 20 20 43 /A>..vacall - C
0210: 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6c 6c 65 functions calle
0220: 64 20 77 69 74 68 20 76 61 72 69 61 62 6c 65 20 d with variable
0230: 61 72 67 75 6d 65 6e 74 73 0a 0a 3c 41 20 4e 41 arguments..<A NA
0240: 4d 45 3d 22 53 79 6e 6f 70 73 69 73 22 3e 0a 3c ME="Synopsis">.<
0250: 48 32 3e 53 79 6e 6f 70 73 69 73 3c 2f 48 32 3e H2>Synopsis</H2>
0260: 0a 3c 2f 41 3e 0a 0a 3c 50 52 45 3e 0a 3c 43 4f .</A>..<PRE>.<CO
0270: 44 45 3e 23 69 6e 63 6c 75 64 65 20 26 6c 74 3b DE>#include <
0280: 76 61 63 61 6c 6c 2e 68 26 67 74 3b 3c 2f 43 4f vacall.h></CO
0290: 44 45 3e 0a 3c 2f 50 52 45 3e 0a 3c 50 3e 0a 3c DE>.</PRE>.<P>.<
02a0: 50 52 45 3e 0a 3c 43 4f 44 45 3e 65 78 74 65 72 PRE>.<CODE>exter
02b0: 6e 20 76 6f 69 64 2a 20 76 61 63 61 6c 6c 5f 66 n void* vacall_f
02c0: 75 6e 63 74 69 6f 6e 3b 3c 2f 43 4f 44 45 3e 0a unction;</CODE>.
02d0: 3c 2f 50 52 45 3e 0a 3c 50 3e 0a 3c 50 52 45 3e </PRE>.<P>.<PRE>
02e0: 0a 3c 43 4f 44 45 3e 76 6f 69 64 20 3c 56 41 52 .<CODE>void <VAR
02f0: 3e 66 75 6e 63 74 69 6f 6e 3c 2f 56 41 52 3e 20 >function</VAR>
0300: 28 3c 56 41 52 3e 61 6c 69 73 74 3c 2f 56 41 52 (<VAR>alist</VAR
0310: 3e 29 3c 2f 43 4f 44 45 3e 0a 3c 43 4f 44 45 3e >)</CODE>.<CODE>
0320: 20 20 76 61 5f 61 6c 69 73 74 20 3c 56 41 52 3e va_alist <VAR>
0330: 61 6c 69 73 74 3c 2f 56 41 52 3e 3b 3c 2f 43 4f alist</VAR>;</CO
0340: 44 45 3e 0a 3c 43 4f 44 45 3e 7b 3c 2f 43 4f 44 DE>.<CODE>{</COD
0350: 45 3e 0a 3c 43 4f 44 45 3e 20 20 76 61 5f 73 74 E>.<CODE> va_st
0360: 61 72 74 5f 3c 56 41 52 3e 74 79 70 65 3c 2f 56 art_<VAR>type</V
0370: 41 52 3e 28 3c 56 41 52 3e 61 6c 69 73 74 3c 2f AR>(<VAR>alist</
0380: 56 41 52 3e 5b 2c 20 3c 56 41 52 3e 72 65 74 75 VAR>[, <VAR>retu
0390: 72 6e 5f 74 79 70 65 3c 2f 56 41 52 3e 5d 29 3b rn_type</VAR>]);
03a0: 3c 2f 43 4f 44 45 3e 0a 3c 43 4f 44 45 3e 20 20 </CODE>.<CODE>
03b0: 61 72 67 20 3d 20 76 61 5f 61 72 67 5f 3c 56 41 arg = va_arg_<VA
03c0: 52 3e 74 79 70 65 3c 2f 56 41 52 3e 28 3c 56 41 R>type</VAR>(<VA
03d0: 52 3e 61 6c 69 73 74 3c 2f 56 41 52 3e 5b 2c 20 R>alist</VAR>[,
03e0: 3c 56 41 52 3e 61 72 67 5f 74 79 70 65 3c 2f 56 <VAR>arg_type</V
03f0: 41 52 3e 5d 29 3b 3c 2f 43 4f 44 45 3e 0a 3c 43 AR>]);</CODE>.<C
0400: 4f 44 45 3e 20 20 76 61 5f 72 65 74 75 72 6e 5f ODE> va_return_
0410: 3c 56 41 52 3e 74 79 70 65 3c 2f 56 41 52 3e 28 <VAR>type</VAR>(
0420: 3c 56 41 52 3e 61 6c 69 73 74 3c 2f 56 41 52 3e <VAR>alist</VAR>
0430: 5b 5b 2c 20 3c 56 41 52 3e 72 65 74 75 72 6e 5f [[, <VAR>return_
0440: 74 79 70 65 3c 2f 56 41 52 3e 5d 2c 20 3c 56 41 type</VAR>], <VA
0450: 52 3e 72 65 74 75 72 6e 5f 76 61 6c 75 65 3c 2f R>return_value</
0460: 56 41 52 3e 5d 29 3b 3c 2f 43 4f 44 45 3e 0a 3c VAR>]);</CODE>.<
0470: 43 4f 44 45 3e 7d 3c 2f 43 4f 44 45 3e 0a 3c 2f CODE>}</CODE>.</
0480: 50 52 45 3e 0a 3c 50 3e 0a 3c 50 52 45 3e 0a 3c PRE>.<P>.<PRE>.<
0490: 43 4f 44 45 3e 76 61 63 61 6c 6c 5f 66 75 6e 63 CODE>vacall_func
04a0: 74 69 6f 6e 20 3d 20 3c 56 41 52 3e 26 66 75 6e tion = <VAR>&fun
04b0: 63 74 69 6f 6e 3c 2f 56 41 52 3e 3b 3c 2f 43 4f ction</VAR>;</CO
04c0: 44 45 3e 0a 3c 2f 50 52 45 3e 0a 3c 50 3e 0a 3c DE>.</PRE>.<P>.<
04d0: 50 52 45 3e 0a 3c 43 4f 44 45 3e 3c 56 41 52 3e PRE>.<CODE><VAR>
04e0: 76 61 6c 3c 2f 56 41 52 3e 20 3d 20 28 28 3c 56 val</VAR> = ((<V
04f0: 41 52 3e 72 65 74 75 72 6e 5f 74 79 70 65 3c 2f AR>return_type</
0500: 56 41 52 3e 20 28 2a 29 20 28 29 29 20 76 61 63 VAR> (*) ()) vac
0510: 61 6c 6c 29 20 28 3c 56 41 52 3e 61 72 67 31 3c all) (<VAR>arg1<
0520: 2f 56 41 52 3e 2c 3c 56 41 52 3e 61 72 67 32 3c /VAR>,<VAR>arg2<
0530: 2f 56 41 52 3e 2c 3c 56 41 52 3e 2e 2e 2e 3c 2f /VAR>,<VAR>...</
0540: 56 41 52 3e 29 3b 3c 2f 43 4f 44 45 3e 0a 3c 2f VAR>);</CODE>.</
0550: 50 52 45 3e 0a 0a 3c 41 20 4e 41 4d 45 3d 22 44 PRE>..<A NAME="D
0560: 65 73 63 72 69 70 74 69 6f 6e 22 3e 0a 3c 48 32 escription">.<H2
0570: 3e 44 65 73 63 72 69 70 74 69 6f 6e 3c 2f 48 32 >Description</H2
0580: 3e 0a 3c 2f 41 3e 0a 0a 54 68 69 73 20 20 73 65 >.</A>..This se
0590: 74 20 20 6f 66 20 20 6d 61 63 72 6f 73 20 20 70 t of macros p
05a0: 65 72 6d 69 74 20 20 61 20 43 20 66 75 6e 63 74 ermit a C funct
05b0: 69 6f 6e 20 3c 56 41 52 3e 66 75 6e 63 74 69 6f ion <VAR>functio
05c0: 6e 3c 2f 56 41 52 3e 20 74 6f 20 62 65 0a 63 61 n</VAR> to be.ca
05d0: 6c 6c 65 64 20 77 69 74 68 20 76 61 72 69 61 62 lled with variab
05e0: 6c 65 20 20 61 72 67 75 6d 65 6e 74 73 20 20 61 le arguments a
05f0: 6e 64 20 20 74 6f 20 20 72 65 74 75 72 6e 20 20 nd to return
0600: 76 61 72 69 61 62 6c 65 0a 72 65 74 75 72 6e 20 variable.return
0610: 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20 69 73 values. This is
0620: 20 6d 75 63 68 20 6c 69 6b 65 20 74 68 65 20 3c much like the <
0630: 41 20 48 52 45 46 3d 22 76 61 72 61 72 67 73 28 A HREF="varargs(
0640: 33 29 22 3e 3c 43 4f 44 45 3e 3c 42 3e 76 61 72 3)"><CODE><B>var
0650: 61 72 67 73 3c 2f 42 3e 3c 2f 43 4f 44 45 3e 3c args</B></CODE><
0660: 2f 41 3e 28 33 29 20 66 61 63 69 6c 69 74 79 2c /A>(3) facility,
0670: 0a 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 .but also allows
0680: 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 the return valu
0690: 65 20 74 6f 20 62 65 20 20 73 70 65 63 69 66 69 e to be specifi
06a0: 65 64 20 20 61 74 20 20 72 75 6e 0a 74 69 6d 65 ed at run.time
06b0: 2e 0a 3c 50 3e 0a 46 75 6e 63 74 69 6f 6e 20 20 ..<P>.Function
06c0: 63 61 6c 6c 69 6e 67 20 20 63 6f 6e 76 65 6e 74 calling convent
06d0: 69 6f 6e 73 20 64 69 66 66 65 72 20 63 6f 6e 73 ions differ cons
06e0: 69 64 65 72 61 62 6c 79 20 6f 6e 20 64 69 66 66 iderably on diff
06f0: 65 72 65 6e 74 0a 6d 61 63 68 69 6e 65 73 2c 20 erent.machines,
0700: 20 61 6e 64 20 3c 53 41 4d 50 3e 76 61 63 61 6c and <SAMP>vacal
0710: 6c 3c 2f 53 41 4d 50 3e 20 20 61 74 74 65 6d 70 l</SAMP> attemp
0720: 74 73 20 20 74 6f 20 20 70 72 6f 76 69 64 65 20 ts to provide
0730: 20 73 6f 6d 65 0a 64 65 67 72 65 65 20 6f 66 20 some.degree of
0740: 69 73 6f 6c 61 74 69 6f 6e 20 66 72 6f 6d 20 73 isolation from s
0750: 75 63 68 20 61 72 63 68 69 74 65 63 74 75 72 65 uch architecture
0760: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 0a 3c dependencies..<
0770: 50 3e 0a 54 68 65 20 20 66 75 6e 63 74 69 6f 6e P>.The function
0780: 20 20 74 68 61 74 20 63 61 6e 20 62 65 20 63 61 that can be ca
0790: 6c 6c 65 64 20 77 69 74 68 20 61 6e 79 20 6e 75 lled with any nu
07a0: 6d 62 65 72 20 61 6e 64 20 74 79 70 65 0a 6f 66 mber and type.of
07b0: 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 77 arguments and w
07c0: 68 69 63 68 20 77 69 6c 6c 20 20 72 65 74 75 72 hich will retur
07d0: 6e 20 20 61 6e 79 20 20 74 79 70 65 20 20 6f 66 n any type of
07e0: 20 20 72 65 74 75 72 6e 0a 76 61 6c 75 65 20 69 return.value i
07f0: 73 20 3c 43 4f 44 45 3e 76 61 63 61 6c 6c 3c 2f s <CODE>vacall</
0800: 43 4f 44 45 3e 2e 20 20 49 74 20 77 69 6c 6c 20 CODE>. It will
0810: 64 6f 20 73 6f 6d 65 20 6d 61 67 69 63 20 61 6e do some magic an
0820: 64 20 63 61 6c 6c 20 74 68 65 20 66 75 6e 63 74 d call the funct
0830: 69 6f 6e 0a 73 74 6f 72 65 64 20 69 6e 20 74 68 ion.stored in th
0840: 65 20 76 61 72 69 61 62 6c 65 20 3c 43 4f 44 45 e variable <CODE
0850: 3e 76 61 63 61 6c 6c 5f 66 75 6e 63 74 69 6f 6e >vacall_function
0860: 3c 2f 43 4f 44 45 3e 2e 20 20 49 66 20 79 6f 75 </CODE>. If you
0870: 20 20 77 61 6e 74 0a 74 6f 20 6d 61 6b 65 20 6d want.to make m
0880: 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 75 73 65 ore than one use
0890: 20 6f 66 20 3c 53 41 4d 50 3e 76 61 63 61 6c 6c of <SAMP>vacall
08a0: 3c 2f 53 41 4d 50 3e 2c 0a 75 73 65 20 74 68 65 </SAMP>,.use the
08b0: 20 3c 41 20 48 52 45 46 3d 22 74 72 61 6d 70 6f <A HREF="trampo
08c0: 6c 69 6e 65 28 33 29 22 3e 3c 43 4f 44 45 3e 3c line(3)"><CODE><
08d0: 42 3e 74 72 61 6d 70 6f 6c 69 6e 65 3c 2f 42 3e B>trampoline</B>
08e0: 3c 2f 43 4f 44 45 3e 3c 2f 41 3e 28 33 29 0a 66 </CODE></A>(3).f
08f0: 61 63 69 6c 69 74 79 20 74 6f 20 20 73 74 6f 72 acility to stor
0900: 65 20 3c 43 4f 44 45 3e 3c 56 41 52 3e 26 61 6d e <CODE><VAR>&am
0910: 70 3b 66 75 6e 63 74 69 6f 6e 3c 2f 56 41 52 3e p;function</VAR>
0920: 3c 2f 43 4f 44 45 3e 0a 20 20 69 6e 74 6f 20 20 </CODE>. into
0930: 3c 43 4f 44 45 3e 76 61 63 61 6c 6c 5f 66 75 6e <CODE>vacall_fun
0940: 63 74 69 6f 6e 3c 2f 43 4f 44 45 3e 20 20 6a 75 ction</CODE> ju
0950: 73 74 0a 62 65 66 6f 72 65 20 63 61 6c 6c 69 6e st.before callin
0960: 67 20 3c 43 4f 44 45 3e 76 61 63 61 6c 6c 3c 2f g <CODE>vacall</
0970: 43 4f 44 45 3e 2e 0a 3c 50 3e 0a 57 69 74 68 69 CODE>..<P>.Withi
0980: 6e 20 3c 56 41 52 3e 66 75 6e 63 74 69 6f 6e 3c n <VAR>function<
0990: 2f 56 41 52 3e 2c 20 74 68 65 20 66 6f 6c 6c 6f /VAR>, the follo
09a0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 63 61 6e 20 wing macros can
09b0: 62 65 20 75 73 65 64 20 74 6f 20 77 61 6c 6b 0a be used to walk.
09c0: 74 68 72 6f 75 67 68 20 74 68 65 20 61 72 67 75 through the argu
09d0: 6d 65 6e 74 20 6c 69 73 74 20 61 6e 64 20 73 70 ment list and sp
09e0: 65 63 69 66 79 20 61 20 72 65 74 75 72 6e 20 76 ecify a return v
09f0: 61 6c 75 65 3a 0a 3c 50 3e 0a 3c 50 52 45 3e 0a alue:.<P>.<PRE>.
0a00: 3c 43 4f 44 45 3e 76 61 5f 73 74 61 72 74 5f 3c <CODE>va_start_<
0a10: 56 41 52 3e 74 79 70 65 3c 2f 56 41 52 3e 28 3c VAR>type</VAR>(<
0a20: 56 41 52 3e 61 6c 69 73 74 3c 2f 56 41 52 3e 5b VAR>alist</VAR>[
0a30: 2c 20 3c 56 41 52 3e 72 65 74 75 72 6e 5f 74 79 , <VAR>return_ty
0a40: 70 65 3c 2f 56 41 52 3e 5d 29 3b 3c 2f 43 4f 44 pe</VAR>]);</COD
0a50: 45 3e 0a 3c 2f 50 52 45 3e 0a 73 74 61 72 74 73 E>.</PRE>.starts
0a60: 20 74 68 65 20 77 61 6c 6b 20 74 68 72 6f 75 67 the walk throug
0a70: 68 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6c h the argument l
0a80: 69 73 74 20 61 6e 64 20 73 70 65 63 69 66 69 65 ist and specifie
0a90: 73 20 74 68 65 20 72 65 74 75 72 6e 20 74 79 70 s the return typ
0aa0: 65 2e 0a 3c 50 3e 0a 3c 50 52 45 3e 0a 3c 43 4f e..<P>.<PRE>.<CO
0ab0: 44 45 3e 61 72 67 20 3d 20 76 61 5f 61 72 67 5f DE>arg = va_arg_
0ac0: 3c 56 41 52 3e 74 79 70 65 3c 2f 56 41 52 3e 28 <VAR>type</VAR>(
0ad0: 3c 56 41 52 3e 61 6c 69 73 74 3c 2f 56 41 52 3e <VAR>alist</VAR>
0ae0: 5b 2c 20 3c 56 41 52 3e 61 72 67 5f 74 79 70 65 [, <VAR>arg_type
0af0: 3c 2f 56 41 52 3e 5d 29 3b 3c 2f 43 4f 44 45 3e </VAR>]);</CODE>
0b00: 0a 3c 2f 50 52 45 3e 0a 66 65 74 63 68 65 73 20 .</PRE>.fetches
0b10: 74 68 65 20 6e 65 78 74 20 61 72 67 75 6d 65 6e the next argumen
0b20: 74 20 66 72 6f 6d 20 74 68 65 20 61 72 67 75 6d t from the argum
0b30: 65 6e 74 20 6c 69 73 74 2e 0a 3c 50 3e 0a 3c 50 ent list..<P>.<P
0b40: 52 45 3e 0a 3c 43 4f 44 45 3e 76 61 5f 72 65 74 RE>.<CODE>va_ret
0b50: 75 72 6e 5f 3c 56 41 52 3e 74 79 70 65 3c 2f 56 urn_<VAR>type</V
0b60: 41 52 3e 28 3c 56 41 52 3e 61 6c 69 73 74 3c 2f AR>(<VAR>alist</
0b70: 56 41 52 3e 5b 5b 2c 20 3c 56 41 52 3e 72 65 74 VAR>[[, <VAR>ret
0b80: 75 72 6e 5f 74 79 70 65 3c 2f 56 41 52 3e 5d 2c urn_type</VAR>],
0b90: 20 3c 56 41 52 3e 72 65 74 75 72 6e 5f 76 61 6c <VAR>return_val
0ba0: 75 65 3c 2f 56 41 52 3e 5d 29 3b 3c 2f 43 4f 44 ue</VAR>]);</COD
0bb0: 45 3e 0a 3c 2f 50 52 45 3e 0a 65 6e 64 73 20 20 E>.</PRE>.ends
0bc0: 74 68 65 20 77 61 6c 6b 20 74 68 72 6f 75 67 68 the walk through
0bd0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 the argument li
0be0: 73 74 20 61 6e 64 20 73 70 65 63 69 66 69 65 73 st and specifies
0bf0: 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 the return valu
0c00: 65 2e 0a 3c 50 3e 0a 54 68 65 20 3c 56 41 52 3e e..<P>.The <VAR>
0c10: 74 79 70 65 3c 2f 56 41 52 3e 20 69 6e 20 3c 43 type</VAR> in <C
0c20: 4f 44 45 3e 76 61 5f 73 74 61 72 74 5f 3c 56 41 ODE>va_start_<VA
0c30: 52 3e 74 79 70 65 3c 2f 56 41 52 3e 3c 2f 43 4f R>type</VAR></CO
0c40: 44 45 3e 0a 20 61 6e 64 20 3c 43 4f 44 45 3e 76 DE>. and <CODE>v
0c50: 61 5f 72 65 74 75 72 6e 5f 3c 56 41 52 3e 74 79 a_return_<VAR>ty
0c60: 70 65 3c 2f 56 41 52 3e 3c 2f 43 4f 44 45 3e 20 pe</VAR></CODE>
0c70: 73 68 61 6c 6c 20 62 65 20 20 6f 6e 65 0a 6f 66 shall be one.of
0c80: 20 3c 43 4f 44 45 3e 76 6f 69 64 3c 2f 43 4f 44 <CODE>void</COD
0c90: 45 3e 2c 20 20 3c 43 4f 44 45 3e 69 6e 74 3c 2f E>, <CODE>int</
0ca0: 43 4f 44 45 3e 2c 20 20 3c 43 4f 44 45 3e 75 69 CODE>, <CODE>ui
0cb0: 6e 74 3c 2f 43 4f 44 45 3e 2c 20 3c 43 4f 44 45 nt</CODE>, <CODE
0cc0: 3e 6c 6f 6e 67 3c 2f 43 4f 44 45 3e 2c 0a 3c 43 >long</CODE>,.<C
0cd0: 4f 44 45 3e 75 6c 6f 6e 67 3c 2f 43 4f 44 45 3e ODE>ulong</CODE>
0ce0: 2c 20 3c 43 4f 44 45 3e 6c 6f 6e 67 6c 6f 6e 67 , <CODE>longlong
0cf0: 3c 2f 43 4f 44 45 3e 2c 20 3c 43 4f 44 45 3e 75 </CODE>, <CODE>u
0d00: 6c 6f 6e 67 6c 6f 6e 67 3c 2f 43 4f 44 45 3e 2c longlong</CODE>,
0d10: 0a 3c 43 4f 44 45 3e 64 6f 75 62 6c 65 3c 2f 43 .<CODE>double</C
0d20: 4f 44 45 3e 2c 20 3c 43 4f 44 45 3e 73 74 72 75 ODE>, <CODE>stru
0d30: 63 74 3c 2f 43 4f 44 45 3e 2c 20 3c 43 4f 44 45 ct</CODE>, <CODE
0d40: 3e 70 74 72 3c 2f 43 4f 44 45 3e 0a 6f 72 0a 28 >ptr</CODE>.or.(
0d50: 66 6f 72 20 41 4e 53 49 20 43 20 63 61 6c 6c 69 for ANSI C calli
0d60: 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 20 6f ng conventions o
0d70: 6e 6c 79 29 0a 3c 43 4f 44 45 3e 63 68 61 72 3c nly).<CODE>char<
0d80: 2f 43 4f 44 45 3e 2c 20 3c 43 4f 44 45 3e 73 63 /CODE>, <CODE>sc
0d90: 68 61 72 3c 2f 43 4f 44 45 3e 2c 20 20 3c 43 4f har</CODE>, <CO
0da0: 44 45 3e 75 63 68 61 72 3c 2f 43 4f 44 45 3e 2c DE>uchar</CODE>,
0db0: 0a 3c 43 4f 44 45 3e 73 68 6f 72 74 3c 2f 43 4f .<CODE>short</CO
0dc0: 44 45 3e 2c 20 20 20 3c 43 4f 44 45 3e 75 73 68 DE>, <CODE>ush
0dd0: 6f 72 74 3c 2f 43 4f 44 45 3e 2c 20 20 20 3c 43 ort</CODE>, <C
0de0: 4f 44 45 3e 66 6c 6f 61 74 3c 2f 43 4f 44 45 3e ODE>float</CODE>
0df0: 2c 0a 64 65 70 65 6e 64 69 6e 67 20 20 20 6f 6e ,.depending on
0e00: 20 20 74 68 65 20 20 63 6c 61 73 73 20 20 6f 66 the class of
0e10: 20 3c 56 41 52 3e 72 65 74 75 72 6e 5f 74 79 70 <VAR>return_typ
0e20: 65 3c 2f 56 41 52 3e 2e 0a 3c 50 3e 0a 54 68 65 e</VAR>..<P>.The
0e30: 20 3c 56 41 52 3e 74 79 70 65 3c 2f 56 41 52 3e <VAR>type</VAR>
0e40: 20 73 70 65 63 69 66 69 65 72 73 20 69 6e 0a 3c specifiers in.<
0e50: 43 4f 44 45 3e 76 61 5f 73 74 61 72 74 5f 3c 56 CODE>va_start_<V
0e60: 41 52 3e 74 79 70 65 3c 2f 56 41 52 3e 3c 2f 43 AR>type</VAR></C
0e70: 4f 44 45 3e 20 61 6e 64 20 3c 43 4f 44 45 3e 76 ODE> and <CODE>v
0e80: 61 5f 72 65 74 75 72 6e 5f 3c 56 41 52 3e 74 79 a_return_<VAR>ty
0e90: 70 65 3c 2f 56 41 52 3e 3c 2f 43 4f 44 45 3e 0a pe</VAR></CODE>.
0ea0: 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d must be the sam
0eb0: 65 2e 0a 54 68 65 20 3c 56 41 52 3e 72 65 74 75 e..The <VAR>retu
0ec0: 72 6e 5f 74 79 70 65 3c 2f 56 41 52 3e 20 73 70 rn_type</VAR> sp
0ed0: 65 63 69 66 69 65 72 73 20 20 20 70 61 73 73 65 ecifiers passe
0ee0: 64 20 20 20 20 74 6f 0a 3c 43 4f 44 45 3e 76 61 d to.<CODE>va
0ef0: 5f 73 74 61 72 74 5f 3c 56 41 52 3e 74 79 70 65 _start_<VAR>type
0f00: 3c 2f 56 41 52 3e 3c 2f 43 4f 44 45 3e 20 61 6e </VAR></CODE> an
0f10: 64 20 3c 43 4f 44 45 3e 76 61 5f 72 65 74 75 72 d <CODE>va_retur
0f20: 6e 5f 3c 56 41 52 3e 74 79 70 65 3c 2f 56 41 52 n_<VAR>type</VAR
0f30: 3e 3c 2f 43 4f 44 45 3e 0a 20 6d 75 73 74 20 62 ></CODE>. must b
0f40: 65 20 74 68 65 20 73 61 6d 65 2e 0a 3c 50 3e 0a e the same..<P>.
0f50: 54 68 65 20 3c 56 41 52 3e 74 79 70 65 3c 2f 56 The <VAR>type</V
0f60: 41 52 3e 20 69 6e 20 3c 43 4f 44 45 3e 76 61 5f AR> in <CODE>va_
0f70: 61 72 67 5f 3c 56 41 52 3e 74 79 70 65 3c 2f 56 arg_<VAR>type</V
0f80: 41 52 3e 3c 2f 43 4f 44 45 3e 0a 73 68 61 6c 6c AR></CODE>.shall
0f90: 20 62 65 20 6f 6e 65 20 6f 66 20 3c 43 4f 44 45 be one of <CODE
0fa0: 3e 69 6e 74 3c 2f 43 4f 44 45 3e 2c 20 20 3c 43 >int</CODE>, <C
0fb0: 4f 44 45 3e 75 69 6e 74 3c 2f 43 4f 44 45 3e 2c ODE>uint</CODE>,
0fc0: 20 3c 43 4f 44 45 3e 6c 6f 6e 67 3c 2f 43 4f 44 <CODE>long</COD
0fd0: 45 3e 2c 0a 3c 43 4f 44 45 3e 75 6c 6f 6e 67 3c E>,.<CODE>ulong<
0fe0: 2f 43 4f 44 45 3e 2c 20 3c 43 4f 44 45 3e 6c 6f /CODE>, <CODE>lo
0ff0: 6e 67 6c 6f 6e 67 3c 2f 43 4f 44 45 3e 2c 20 3c nglong</CODE>, <
1000: 43 4f 44 45 3e 75 6c 6f 6e 67 6c 6f 6e 67 3c 2f CODE>ulonglong</
1010: 43 4f 44 45 3e 2c 0a 3c 43 4f 44 45 3e 64 6f 75 CODE>,.<CODE>dou
1020: 62 6c 65 3c 2f 43 4f 44 45 3e 2c 20 3c 43 4f 44 ble</CODE>, <COD
1030: 45 3e 73 74 72 75 63 74 3c 2f 43 4f 44 45 3e 2c E>struct</CODE>,
1040: 20 3c 43 4f 44 45 3e 70 74 72 3c 2f 43 4f 44 45 <CODE>ptr</CODE
1050: 3e 0a 6f 72 20 28 66 6f 72 20 41 4e 53 49 20 43 >.or (for ANSI C
1060: 20 63 61 6c 6c 69 6e 67 20 20 63 6f 6e 76 65 6e calling conven
1070: 74 69 6f 6e 73 20 20 6f 6e 6c 79 29 0a 3c 43 4f tions only).<CO
1080: 44 45 3e 63 68 61 72 3c 2f 43 4f 44 45 3e 2c 20 DE>char</CODE>,
1090: 3c 43 4f 44 45 3e 73 63 68 61 72 3c 2f 43 4f 44 <CODE>schar</COD
10a0: 45 3e 2c 20 20 3c 43 4f 44 45 3e 75 63 68 61 72 E>, <CODE>uchar
10b0: 3c 2f 43 4f 44 45 3e 2c 0a 3c 43 4f 44 45 3e 73 </CODE>,.<CODE>s
10c0: 68 6f 72 74 3c 2f 43 4f 44 45 3e 2c 20 20 20 3c hort</CODE>, <
10d0: 43 4f 44 45 3e 75 73 68 6f 72 74 3c 2f 43 4f 44 CODE>ushort</COD
10e0: 45 3e 2c 20 20 20 3c 43 4f 44 45 3e 66 6c 6f 61 E>, <CODE>floa
10f0: 74 3c 2f 43 4f 44 45 3e 2c 0a 64 65 70 65 6e 64 t</CODE>,.depend
1100: 69 6e 67 20 20 20 6f 6e 20 20 74 68 65 20 20 63 ing on the c
1110: 6c 61 73 73 20 20 6f 66 20 3c 56 41 52 3e 61 72 lass of <VAR>ar
1120: 67 5f 74 79 70 65 3c 2f 56 41 52 3e 2e 0a 3c 50 g_type</VAR>..<P
1130: 3e 0a 49 6e 20 3c 43 4f 44 45 3e 76 61 5f 73 74 >.In <CODE>va_st
1140: 61 72 74 5f 73 74 72 75 63 74 28 3c 56 41 52 3e art_struct(<VAR>
1150: 61 6c 69 73 74 3c 2f 56 41 52 3e 2c 20 3c 56 41 alist</VAR>, <VA
1160: 52 3e 72 65 74 75 72 6e 5f 74 79 70 65 3c 2f 56 R>return_type</V
1170: 41 52 3e 2c 20 3c 56 41 52 3e 73 70 6c 69 74 74 AR>, <VAR>splitt
1180: 61 62 6c 65 3c 2f 56 41 52 3e 29 3b 3c 2f 43 4f able</VAR>);</CO
1190: 44 45 3e 20 74 68 65 0a 3c 56 41 52 3e 73 70 6c DE> the.<VAR>spl
11a0: 69 74 74 61 62 6c 65 3c 2f 56 41 52 3e 20 66 6c ittable</VAR> fl
11b0: 61 67 20 73 70 65 63 69 66 69 65 73 20 77 68 65 ag specifies whe
11c0: 74 68 65 72 20 74 68 65 20 73 74 72 75 63 74 20 ther the struct
11d0: 3c 56 41 52 3e 72 65 74 75 72 6e 5f 74 79 70 65 <VAR>return_type
11e0: 3c 2f 56 41 52 3e 20 63 61 6e 0a 62 65 20 72 65 </VAR> can.be re
11f0: 74 75 72 6e 65 64 20 69 6e 20 72 65 67 69 73 74 turned in regist
1200: 65 72 73 20 73 75 63 68 20 74 68 61 74 20 65 76 ers such that ev
1210: 65 72 79 20 73 74 72 75 63 74 20 66 69 65 6c 64 ery struct field
1220: 20 66 69 74 73 0a 65 6e 74 69 72 65 6c 79 20 20 fits.entirely
1230: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 65 67 69 in a single regi
1240: 73 74 65 72 2e 20 54 68 69 73 20 6e 65 65 64 73 ster. This needs
1250: 20 74 6f 20 62 65 20 73 70 65 63 69 66 69 65 64 to be specified
1260: 0a 66 6f 72 20 73 74 72 75 63 74 73 20 6f 66 20 .for structs of
1270: 73 69 7a 65 20 3c 53 41 4d 50 3e 32 2a 73 69 7a size <SAMP>2*siz
1280: 65 6f 66 28 6c 6f 6e 67 29 3c 2f 53 41 4d 50 3e eof(long)</SAMP>
1290: 2e 20 46 6f 72 20 73 74 72 75 63 74 73 20 6f 66 . For structs of
12a0: 20 73 69 7a 65 0a 26 6c 74 3b 3d 20 3c 53 41 4d size.<= <SAM
12b0: 50 3e 73 69 7a 65 6f 66 28 6c 6f 6e 67 29 3c 2f P>sizeof(long)</
12c0: 53 41 4d 50 3e 2c 20 20 73 70 6c 69 74 74 61 62 SAMP>, splittab
12d0: 6c 65 20 20 69 73 20 69 67 6e 6f 72 65 64 20 61 le is ignored a
12e0: 6e 64 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 nd assumed to be
12f0: 20 31 2e 0a 46 6f 72 20 20 73 74 72 75 63 74 73 1..For structs
1300: 20 20 6f 66 20 20 73 69 7a 65 20 20 26 67 74 3b of size >
1310: 20 3c 53 41 4d 50 3e 32 2a 73 69 7a 65 6f 66 28 <SAMP>2*sizeof(
1320: 6c 6f 6e 67 29 3c 2f 53 41 4d 50 3e 2c 20 20 73 long)</SAMP>, s
1330: 70 6c 69 74 74 61 62 6c 65 20 20 69 73 0a 69 67 plittable is.ig
1340: 6e 6f 72 65 64 20 20 61 6e 64 20 20 61 73 73 75 nored and assu
1350: 6d 65 64 20 74 6f 20 62 65 20 30 2e 20 54 68 65 med to be 0. The
1360: 72 65 20 61 72 65 20 73 6f 6d 65 20 68 61 6e 64 re are some hand
1370: 79 20 6d 61 63 72 6f 73 0a 66 6f 72 20 74 68 69 y macros.for thi
1380: 73 3a 0a 3c 50 52 45 3e 0a 3c 43 4f 44 45 3e 76 s:.<PRE>.<CODE>v
1390: 61 5f 77 6f 72 64 5f 73 70 6c 69 74 74 61 62 6c a_word_splittabl
13a0: 65 5f 31 20 28 3c 56 41 52 3e 74 79 70 65 31 3c e_1 (<VAR>type1<
13b0: 2f 56 41 52 3e 29 3c 2f 43 4f 44 45 3e 0a 3c 43 /VAR>)</CODE>.<C
13c0: 4f 44 45 3e 76 61 5f 77 6f 72 64 5f 73 70 6c 69 ODE>va_word_spli
13d0: 74 74 61 62 6c 65 5f 32 20 28 3c 56 41 52 3e 74 ttable_2 (<VAR>t
13e0: 79 70 65 31 3c 2f 56 41 52 3e 2c 20 3c 56 41 52 ype1</VAR>, <VAR
13f0: 3e 74 79 70 65 32 3c 2f 56 41 52 3e 29 3c 2f 43 >type2</VAR>)</C
1400: 4f 44 45 3e 0a 3c 43 4f 44 45 3e 76 61 5f 77 6f ODE>.<CODE>va_wo
1410: 72 64 5f 73 70 6c 69 74 74 61 62 6c 65 5f 33 20 rd_splittable_3
1420: 28 3c 56 41 52 3e 74 79 70 65 31 3c 2f 56 41 52 (<VAR>type1</VAR
1430: 3e 2c 20 3c 56 41 52 3e 74 79 70 65 32 3c 2f 56 >, <VAR>type2</V
1440: 41 52 3e 2c 20 3c 56 41 52 3e 74 79 70 65 33 3c AR>, <VAR>type3<
1450: 2f 56 41 52 3e 29 3c 2f 43 4f 44 45 3e 0a 3c 43 /VAR>)</CODE>.<C
1460: 4f 44 45 3e 76 61 5f 77 6f 72 64 5f 73 70 6c 69 ODE>va_word_spli
1470: 74 74 61 62 6c 65 5f 34 20 28 3c 56 41 52 3e 74 ttable_4 (<VAR>t
1480: 79 70 65 31 3c 2f 56 41 52 3e 2c 20 3c 56 41 52 ype1</VAR>, <VAR
1490: 3e 74 79 70 65 32 3c 2f 56 41 52 3e 2c 20 3c 56 >type2</VAR>, <V
14a0: 41 52 3e 74 79 70 65 33 3c 2f 56 41 52 3e 2c 20 AR>type3</VAR>,
14b0: 3c 56 41 52 3e 74 79 70 65 34 3c 2f 56 41 52 3e <VAR>type4</VAR>
14c0: 29 3c 2f 43 4f 44 45 3e 0a 3c 2f 50 52 45 3e 0a )</CODE>.</PRE>.
14d0: 46 6f 72 20 61 20 73 74 72 75 63 74 20 77 69 74 For a struct wit
14e0: 68 20 74 68 72 65 65 20 73 6c 6f 74 73 0a 3c 50 h three slots.<P
14f0: 52 45 3e 0a 3c 43 4f 44 45 3e 73 74 72 75 63 74 RE>.<CODE>struct
1500: 20 7b 20 3c 56 41 52 3e 74 79 70 65 31 20 69 64 { <VAR>type1 id
1510: 31 3c 2f 56 41 52 3e 3b 20 3c 56 41 52 3e 74 79 1</VAR>; <VAR>ty
1520: 70 65 32 20 69 64 32 3c 2f 56 41 52 3e 3b 20 3c pe2 id2</VAR>; <
1530: 56 41 52 3e 74 79 70 65 33 20 69 64 33 3c 2f 56 VAR>type3 id3</V
1540: 41 52 3e 3b 20 7d 3c 2f 43 4f 44 45 3e 0a 3c 2f AR>; }</CODE>.</
1550: 50 52 45 3e 0a 79 6f 75 20 63 61 6e 20 73 70 65 PRE>.you can spe
1560: 63 69 66 79 20 3c 56 41 52 3e 73 70 6c 69 74 74 cify <VAR>splitt
1570: 61 62 6c 65 3c 2f 56 41 52 3e 20 61 73 0a 3c 43 able</VAR> as.<C
1580: 4f 44 45 3e 76 61 5f 77 6f 72 64 5f 73 70 6c 69 ODE>va_word_spli
1590: 74 74 61 62 6c 65 5f 33 20 28 3c 56 41 52 3e 74 ttable_3 (<VAR>t
15a0: 79 70 65 31 3c 2f 56 41 52 3e 2c 20 3c 56 41 52 ype1</VAR>, <VAR
15b0: 3e 74 79 70 65 32 3c 2f 56 41 52 3e 2c 20 3c 56 >type2</VAR>, <V
15c0: 41 52 3e 74 79 70 65 33 3c 2f 56 41 52 3e 29 3c AR>type3</VAR>)<
15d0: 2f 43 4f 44 45 3e 2e 0a 0a 3c 41 20 4e 41 4d 45 /CODE>...<A NAME
15e0: 3d 22 4e 6f 74 65 73 22 3e 0a 3c 48 32 3e 4e 6f ="Notes">.<H2>No
15f0: 74 65 73 3c 2f 48 32 3e 0a 3c 2f 41 3e 0a 0a 3c tes</H2>.</A>..<
1600: 4f 4c 3e 0a 3c 4c 49 3e 20 46 75 6e 63 74 69 6f OL>.<LI> Functio
1610: 6e 73 20 77 68 69 63 68 20 77 61 6e 74 20 74 6f ns which want to
1620: 20 65 6d 75 6c 61 74 65 20 4b 65 72 6e 69 67 68 emulate Kernigh
1630: 61 6e 20 26 61 6d 70 3b 20 52 69 74 63 68 69 65 an & Ritchie
1640: 20 20 73 74 79 6c 65 0a 66 75 6e 63 74 69 6f 6e style.function
1650: 73 20 20 28 69 2e 65 2e 2c 20 20 69 6e 20 20 41 s (i.e., in A
1660: 4e 53 49 20 20 43 2c 20 20 66 75 6e 63 74 69 6f NSI C, functio
1670: 6e 73 20 77 69 74 68 6f 75 74 20 61 20 74 79 70 ns without a typ
1680: 65 64 0a 61 72 67 75 6d 65 6e 74 20 6c 69 73 74 ed.argument list
1690: 29 20 63 61 6e 6e 6f 74 20 75 73 65 20 74 68 65 ) cannot use the
16a0: 20 3c 56 41 52 3e 74 79 70 65 3c 2f 56 41 52 3e <VAR>type</VAR>
16b0: 20 20 76 61 6c 75 65 73 0a 3c 43 4f 44 45 3e 63 values.<CODE>c
16c0: 68 61 72 3c 2f 43 4f 44 45 3e 2c 20 3c 43 4f 44 har</CODE>, <COD
16d0: 45 3e 73 63 68 61 72 3c 2f 43 4f 44 45 3e 2c 20 E>schar</CODE>,
16e0: 20 3c 43 4f 44 45 3e 75 63 68 61 72 3c 2f 43 4f <CODE>uchar</CO
16f0: 44 45 3e 2c 0a 3c 43 4f 44 45 3e 73 68 6f 72 74 DE>,.<CODE>short
1700: 3c 2f 43 4f 44 45 3e 2c 20 20 20 3c 43 4f 44 45 </CODE>, <CODE
1710: 3e 75 73 68 6f 72 74 3c 2f 43 4f 44 45 3e 2c 20 >ushort</CODE>,
1720: 20 20 3c 43 4f 44 45 3e 66 6c 6f 61 74 3c 2f 43 <CODE>float</C
1730: 4f 44 45 3e 2e 0a 41 73 20 70 72 65 73 63 72 69 ODE>..As prescri
1740: 62 65 64 20 62 79 20 74 68 65 20 64 65 66 61 75 bed by the defau
1750: 6c 74 0a 4b 26 61 6d 70 3b 52 20 43 20 65 78 70 lt.K&R C exp
1760: 72 65 73 73 69 6f 6e 20 70 72 6f 6d 6f 74 69 6f ression promotio
1770: 6e 73 2c 20 74 68 65 79 20 68 61 76 65 20 74 6f ns, they have to
1780: 20 75 73 65 20 3c 43 4f 44 45 3e 69 6e 74 3c 2f use <CODE>int</
1790: 43 4f 44 45 3e 20 20 69 6e 73 74 65 61 64 0a 6f CODE> instead.o
17a0: 66 20 3c 43 4f 44 45 3e 63 68 61 72 3c 2f 43 4f f <CODE>char</CO
17b0: 44 45 3e 2c 20 3c 43 4f 44 45 3e 73 63 68 61 72 DE>, <CODE>schar
17c0: 3c 2f 43 4f 44 45 3e 2c 20 20 3c 43 4f 44 45 3e </CODE>, <CODE>
17d0: 75 63 68 61 72 3c 2f 43 4f 44 45 3e 2c 0a 3c 43 uchar</CODE>,.<C
17e0: 4f 44 45 3e 73 68 6f 72 74 3c 2f 43 4f 44 45 3e ODE>short</CODE>
17f0: 2c 20 20 20 3c 43 4f 44 45 3e 75 73 68 6f 72 74 , <CODE>ushort
1800: 3c 2f 43 4f 44 45 3e 20 61 6e 64 20 3c 43 4f 44 </CODE> and <COD
1810: 45 3e 64 6f 75 62 6c 65 3c 2f 43 4f 44 45 3e 20 E>double</CODE>
1820: 69 6e 73 74 65 61 64 20 6f 66 0a 3c 43 4f 44 45 instead of.<CODE
1830: 3e 66 6c 6f 61 74 3c 2f 43 4f 44 45 3e 2e 0a 3c >float</CODE>..<
1840: 50 3e 0a 3c 4c 49 3e 20 54 68 65 20 6d 61 63 72 P>.<LI> The macr
1850: 6f 73 20 3c 43 4f 44 45 3e 76 61 5f 73 74 61 72 os <CODE>va_star
1860: 74 5f 6c 6f 6e 67 6c 6f 6e 67 28 29 3c 2f 43 4f t_longlong()</CO
1870: 44 45 3e 2c 0a 3c 43 4f 44 45 3e 76 61 5f 73 74 DE>,.<CODE>va_st
1880: 61 72 74 5f 75 6c 6f 6e 67 6c 6f 6e 67 28 29 3c art_ulonglong()<
1890: 2f 43 4f 44 45 3e 2c 20 3c 43 4f 44 45 3e 76 61 /CODE>, <CODE>va
18a0: 5f 72 65 74 75 72 6e 5f 6c 6f 6e 67 6c 6f 6e 67 _return_longlong
18b0: 28 29 3c 2f 43 4f 44 45 3e 2c 0a 3c 43 4f 44 45 ()</CODE>,.<CODE
18c0: 3e 76 61 5f 72 65 74 75 72 6e 5f 75 6c 6f 6e 67 >va_return_ulong
18d0: 6c 6f 6e 67 28 29 3c 2f 43 4f 44 45 3e 2c 20 3c long()</CODE>, <
18e0: 43 4f 44 45 3e 76 61 5f 61 72 67 5f 6c 6f 6e 67 CODE>va_arg_long
18f0: 6c 6f 6e 67 28 29 3c 2f 43 4f 44 45 3e 20 61 6e long()</CODE> an
1900: 64 0a 3c 43 4f 44 45 3e 76 61 5f 61 72 67 5f 75 d.<CODE>va_arg_u
1910: 6c 6f 6e 67 6c 6f 6e 67 28 29 3c 2f 43 4f 44 45 longlong()</CODE
1920: 3e 20 77 6f 72 6b 20 6f 6e 6c 79 20 69 66 20 74 > work only if t
1930: 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 68 61 he C compiler ha
1940: 73 20 61 20 77 6f 72 6b 69 6e 67 0a 3c 43 4f 44 s a working.<COD
1950: 45 3e 6c 6f 6e 67 20 6c 6f 6e 67 3c 2f 43 4f 44 E>long long</COD
1960: 45 3e 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 E> 64-bit intege
1970: 72 20 74 79 70 65 2e 0a 3c 50 3e 0a 3c 4c 49 3e r type..<P>.<LI>
1980: 20 54 68 65 20 73 74 72 75 63 74 20 74 79 70 65 The struct type
1990: 73 20 75 73 65 64 20 69 6e 20 3c 43 4f 44 45 3e s used in <CODE>
19a0: 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 28 va_start_struct(
19b0: 29 3c 2f 43 4f 44 45 3e 20 61 6e 64 0a 3c 43 4f )</CODE> and.<CO
19c0: 44 45 3e 76 61 5f 73 74 72 75 63 74 28 29 3c 2f DE>va_struct()</
19d0: 43 4f 44 45 3e 20 6d 75 73 74 20 6f 6e 6c 79 20 CODE> must only
19e0: 63 6f 6e 74 61 69 6e 20 28 73 69 67 6e 65 64 20 contain (signed
19f0: 6f 72 20 75 6e 73 69 67 6e 65 64 29 20 69 6e 74 or unsigned) int
1a00: 2c 0a 6c 6f 6e 67 2c 20 6c 6f 6e 67 20 6c 6f 6e ,.long, long lon
1a10: 67 20 6f 72 20 70 6f 69 6e 74 65 72 20 66 69 65 g or pointer fie
1a20: 6c 64 73 2e 20 53 74 72 75 63 74 20 74 79 70 65 lds. Struct type
1a30: 73 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 28 73 69 s containing.(si
1a40: 67 6e 65 64 20 6f 72 20 75 6e 73 69 67 6e 65 64 gned or unsigned
1a50: 29 20 63 68 61 72 2c 20 73 68 6f 72 74 2c 20 66 ) char, short, f
1a60: 6c 6f 61 74 2c 20 64 6f 75 62 6c 65 20 6f 72 20 loat, double or
1a70: 6f 74 68 65 72 0a 73 74 72 75 63 74 73 20 61 72 other.structs ar
1a80: 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e e not supported.
1a90: 0a 3c 50 3e 0a 3c 2f 4f 4c 3e 0a 0a 3c 41 20 4e .<P>.</OL>..<A N
1aa0: 41 4d 45 3d 22 45 78 61 6d 70 6c 65 22 3e 0a 3c AME="Example">.<
1ab0: 48 32 3e 45 78 61 6d 70 6c 65 3c 2f 48 32 3e 0a H2>Example</H2>.
1ac0: 3c 2f 41 3e 0a 0a 54 68 69 73 20 65 78 61 6d 70 </A>..This examp
1ad0: 6c 65 2c 20 61 20 70 6f 73 73 69 62 6c 65 20 69 le, a possible i
1ae0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 mplementation of
1af0: 20 3c 41 20 48 52 45 46 3d 22 65 78 65 63 6c 28 <A HREF="execl(
1b00: 33 29 22 3e 3c 43 4f 44 45 3e 3c 42 3e 65 78 65 3)"><CODE><B>exe
1b10: 63 6c 3c 2f 42 3e 3c 2f 43 4f 44 45 3e 3c 2f 41 cl</B></CODE></A
1b20: 3e 28 33 29 20 6f 6e 20 74 6f 70 0a 6f 66 20 3c >(3) on top.of <
1b30: 41 20 48 52 45 46 3d 22 65 78 65 63 76 28 32 29 A HREF="execv(2)
1b40: 22 3e 3c 43 4f 44 45 3e 3c 42 3e 65 78 65 63 76 "><CODE><B>execv
1b50: 3c 2f 42 3e 3c 2f 43 4f 44 45 3e 3c 2f 41 3e 28 </B></CODE></A>(
1b60: 32 29 20 75 73 69 6e 67 20 3c 41 20 48 52 45 46 2) using <A HREF
1b70: 3d 22 76 61 72 61 72 67 73 28 33 29 22 3e 3c 43 ="varargs(3)"><C
1b80: 4f 44 45 3e 3c 42 3e 76 61 72 61 72 67 73 3c 2f ODE><B>varargs</
1b90: 42 3e 3c 2f 43 4f 44 45 3e 3c 2f 41 3e 28 33 29 B></CODE></A>(3)
1ba0: 2c 0a 3c 50 52 45 3e 3c 43 4f 44 45 3e 23 69 6e ,.<PRE><CODE>#in
1bb0: 63 6c 75 64 65 20 26 6c 74 3b 76 61 72 61 72 67 clude <vararg
1bc0: 73 2e 68 26 67 74 3b 0a 23 64 65 66 69 6e 65 20 s.h>.#define
1bd0: 4d 41 58 41 52 47 53 20 31 30 30 0a 2f 2a 20 65 MAXARGS 100./* e
1be0: 78 65 63 6c 20 69 73 20 63 61 6c 6c 65 64 20 62 xecl is called b
1bf0: 79 20 65 78 65 63 6c 28 66 69 6c 65 2c 20 61 72 y execl(file, ar
1c00: 67 31 2c 20 61 72 67 32 2c 20 2e 2e 2e 2c 20 28 g1, arg2, ..., (
1c10: 63 68 61 72 20 2a 29 30 29 3b 20 2a 2f 0a 69 6e char *)0); */.in
1c20: 74 20 65 78 65 63 6c 20 28 76 61 5f 61 6c 69 73 t execl (va_alis
1c30: 74 29 0a 20 20 76 61 5f 64 63 6c 0a 7b 0a 20 20 t). va_dcl.{.
1c40: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68 va_list ap;. ch
1c50: 61 72 2a 20 66 69 6c 65 3b 0a 20 20 63 68 61 72 ar* file;. char
1c60: 2a 20 61 72 67 73 5b 4d 41 58 41 52 47 53 5d 3b * args[MAXARGS];
1c70: 0a 20 20 69 6e 74 20 61 72 67 6e 6f 20 3d 20 30 . int argno = 0
1c80: 3b 0a 20 20 76 61 5f 73 74 61 72 74 20 28 61 70 ;. va_start (ap
1c90: 29 3b 0a 20 20 66 69 6c 65 20 3d 20 76 61 5f 61 );. file = va_a
1ca0: 72 67 28 61 70 2c 20 63 68 61 72 2a 29 3b 0a 20 rg(ap, char*);.
1cb0: 20 77 68 69 6c 65 20 28 28 61 72 67 73 5b 61 72 while ((args[ar
1cc0: 67 6e 6f 5d 20 3d 20 76 61 5f 61 72 67 28 61 70 gno] = va_arg(ap
1cd0: 2c 20 63 68 61 72 2a 29 29 20 21 3d 20 28 63 68 , char*)) != (ch
1ce0: 61 72 20 2a 29 30 29 0a 20 20 20 20 61 72 67 6e ar *)0). argn
1cf0: 6f 2b 2b 3b 0a 20 20 76 61 5f 65 6e 64 20 28 61 o++;. va_end (a
1d00: 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 65 78 65 p);. return exe
1d10: 63 76 28 66 69 6c 65 2c 20 61 72 67 73 29 3b 0a cv(file, args);.
1d20: 7d 0a 3c 2f 43 4f 44 45 3e 3c 2f 50 52 45 3e 0a }.</CODE></PRE>.
1d30: 6c 6f 6f 6b 73 20 6c 69 6b 65 20 74 68 69 73 20 looks like this
1d40: 75 73 69 6e 67 20 3c 41 20 48 52 45 46 3d 22 76 using <A HREF="v
1d50: 61 63 61 6c 6c 28 33 29 22 3e 3c 43 4f 44 45 3e acall(3)"><CODE>
1d60: 3c 42 3e 76 61 63 61 6c 6c 3c 2f 42 3e 3c 2f 43 <B>vacall</B></C
1d70: 4f 44 45 3e 3c 2f 41 3e 28 33 29 3a 0a 3c 50 52 ODE></A>(3):.<PR
1d80: 45 3e 3c 43 4f 44 45 3e 23 69 6e 63 6c 75 64 65 E><CODE>#include
1d90: 20 26 6c 74 3b 76 61 63 61 6c 6c 2e 68 26 67 74 <vacall.h>
1da0: 3b 0a 23 64 65 66 69 6e 65 20 4d 41 58 41 52 47 ;.#define MAXARG
1db0: 53 20 31 30 30 0a 2f 2a 20 65 78 65 63 6c 20 69 S 100./* execl i
1dc0: 73 20 63 61 6c 6c 65 64 20 62 79 20 76 61 63 61 s called by vaca
1dd0: 6c 6c 28 66 69 6c 65 2c 20 61 72 67 31 2c 20 61 ll(file, arg1, a
1de0: 72 67 32 2c 20 2e 2e 2e 2c 20 28 63 68 61 72 20 rg2, ..., (char
1df0: 2a 29 30 29 3b 20 2a 2f 0a 76 6f 69 64 20 65 78 *)0); */.void ex
1e00: 65 63 6c 20 28 61 70 29 0a 20 20 76 61 5f 61 6c ecl (ap). va_al
1e10: 69 73 74 20 61 70 3b 0a 7b 0a 20 20 63 68 61 72 ist ap;.{. char
1e20: 2a 20 66 69 6c 65 3b 0a 20 20 63 68 61 72 2a 20 * file;. char*
1e30: 61 72 67 73 5b 4d 41 58 41 52 47 53 5d 3b 0a 20 args[MAXARGS];.
1e40: 20 69 6e 74 20 61 72 67 6e 6f 20 3d 20 30 3b 0a int argno = 0;.
1e50: 20 20 69 6e 74 20 72 65 74 76 61 6c 3b 0a 20 20 int retval;.
1e60: 76 61 5f 73 74 61 72 74 5f 69 6e 74 20 28 61 70 va_start_int (ap
1e70: 29 3b 0a 20 20 66 69 6c 65 20 3d 20 76 61 5f 61 );. file = va_a
1e80: 72 67 5f 70 74 72 28 61 70 2c 20 63 68 61 72 2a rg_ptr(ap, char*
1e90: 29 3b 0a 20 20 77 68 69 6c 65 20 28 28 61 72 67 );. while ((arg
1ea0: 73 5b 61 72 67 6e 6f 5d 20 3d 20 76 61 5f 61 72 s[argno] = va_ar
1eb0: 67 5f 70 74 72 28 61 70 2c 20 63 68 61 72 2a 29 g_ptr(ap, char*)
1ec0: 29 20 21 3d 20 28 63 68 61 72 20 2a 29 30 29 0a ) != (char *)0).
1ed0: 20 20 20 20 61 72 67 6e 6f 2b 2b 3b 0a 20 20 72 argno++;. r
1ee0: 65 74 76 61 6c 20 3d 20 65 78 65 63 76 28 66 69 etval = execv(fi
1ef0: 6c 65 2c 20 61 72 67 73 29 3b 0a 20 20 76 61 5f le, args);. va_
1f00: 72 65 74 75 72 6e 5f 69 6e 74 20 28 61 70 2c 20 return_int (ap,
1f10: 72 65 74 76 61 6c 29 3b 0a 7d 0a 76 61 63 61 6c retval);.}.vacal
1f20: 6c 5f 66 75 6e 63 74 69 6f 6e 20 3d 20 26 61 6d l_function = &am
1f30: 70 3b 65 78 65 63 6c 3b 0a 3c 2f 43 4f 44 45 3e p;execl;.</CODE>
1f40: 3c 2f 50 52 45 3e 0a 3c 50 3e 0a 0a 3c 41 20 4e </PRE>.<P>..<A N
1f50: 41 4d 45 3d 22 53 65 65 20 61 6c 73 6f 22 3e 0a AME="See also">.
1f60: 3c 48 32 3e 53 65 65 20 61 6c 73 6f 3c 2f 48 32 <H2>See also</H2
1f70: 3e 0a 3c 2f 41 3e 0a 0a 3c 41 20 48 52 45 46 3d >.</A>..<A HREF=
1f80: 22 76 61 72 61 72 67 73 28 33 29 22 3e 3c 43 4f "varargs(3)"><CO
1f90: 44 45 3e 3c 42 3e 76 61 72 61 72 67 73 3c 2f 42 DE><B>varargs</B
1fa0: 3e 3c 2f 43 4f 44 45 3e 3c 2f 41 3e 28 33 29 2c ></CODE></A>(3),
1fb0: 20 3c 41 20 48 52 45 46 3d 22 74 72 61 6d 70 6f <A HREF="trampo
1fc0: 6c 69 6e 65 28 33 29 22 3e 3c 43 4f 44 45 3e 3c line(3)"><CODE><
1fd0: 42 3e 74 72 61 6d 70 6f 6c 69 6e 65 3c 2f 42 3e B>trampoline</B>
1fe0: 3c 2f 43 4f 44 45 3e 3c 2f 41 3e 28 33 29 2c 20 </CODE></A>(3),
1ff0: 3c 41 20 48 52 45 46 3d 22 63 61 6c 6c 62 61 63 <A HREF="callbac
2000: 6b 28 33 29 22 3e 3c 43 4f 44 45 3e 3c 42 3e 63 k(3)"><CODE><B>c
2010: 61 6c 6c 62 61 63 6b 3c 2f 42 3e 3c 2f 43 4f 44 allback</B></COD
2020: 45 3e 3c 2f 41 3e 28 33 29 2e 0a 0a 3c 41 20 4e E></A>(3)...<A N
2030: 41 4d 45 3d 22 42 75 67 73 22 3e 0a 3c 48 32 3e AME="Bugs">.<H2>
2040: 42 75 67 73 3c 2f 48 32 3e 0a 3c 2f 41 3e 0a 0a Bugs</H2>.</A>..
2050: 54 68 65 20 20 63 75 72 72 65 6e 74 20 20 69 6d The current im
2060: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 68 61 plementations ha
2070: 76 65 20 62 65 65 6e 20 74 65 73 74 65 64 20 6f ve been tested o
2080: 6e 20 61 20 73 65 6c 65 63 74 69 6f 6e 0a 6f 66 n a selection.of
2090: 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 73 20 62 75 common cases bu
20a0: 74 20 74 68 65 72 65 20 20 61 72 65 20 20 70 72 t there are pr
20b0: 6f 62 61 62 6c 79 20 20 73 74 69 6c 6c 20 20 6d obably still m
20c0: 61 6e 79 0a 62 75 67 73 2e 0a 3c 50 3e 0a 54 68 any.bugs..<P>.Th
20d0: 65 72 65 20 20 61 72 65 20 20 74 79 70 69 63 61 ere are typica
20e0: 6c 6c 79 20 20 62 75 69 6c 74 2d 69 6e 20 20 6c lly built-in l
20f0: 69 6d 69 74 73 20 6f 6e 20 74 68 65 20 73 69 7a imits on the siz
2100: 65 20 6f 66 20 74 68 65 0a 61 72 67 75 6d 65 6e e of the.argumen
2110: 74 2d 6c 69 73 74 2c 20 77 68 69 63 68 20 6d 61 t-list, which ma
2120: 79 20 61 6c 73 6f 20 20 69 6e 63 6c 75 64 65 20 y also include
2130: 20 74 68 65 20 20 73 69 7a 65 20 20 6f 66 20 20 the size of
2140: 61 6e 79 0a 73 74 72 75 63 74 75 72 65 20 61 72 any.structure ar
2150: 67 75 6d 65 6e 74 73 2e 0a 3c 50 3e 0a 54 68 65 guments..<P>.The
2160: 20 64 65 63 69 73 69 6f 6e 20 77 68 65 74 68 65 decision whethe
2170: 72 20 61 20 73 74 72 75 63 74 20 69 73 20 74 6f r a struct is to
2180: 20 62 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 be returned in
2190: 72 65 67 69 73 74 65 72 73 20 6f 72 20 69 6e 20 registers or in
21a0: 6d 65 6d 6f 72 79 0a 63 6f 6e 73 69 64 65 72 73 memory.considers
21b0: 20 6f 6e 6c 79 20 74 68 65 20 73 74 72 75 63 74 only the struct
21c0: 27 73 20 73 69 7a 65 20 61 6e 64 20 61 6c 69 67 's size and alig
21d0: 6e 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20 69 nment. This is i
21e0: 6e 61 63 63 75 72 61 74 65 3a 20 66 6f 72 0a 65 naccurate: for.e
21f0: 78 61 6d 70 6c 65 2c 20 67 63 63 20 6f 6e 20 6d xample, gcc on m
2200: 36 38 6b 2d 6e 65 78 74 20 72 65 74 75 72 6e 73 68k-next returns
2210: 0a 3c 43 4f 44 45 3e 73 74 72 75 63 74 20 7b 20 .<CODE>struct {
2220: 63 68 61 72 20 61 2c 62 2c 63 3b 20 7d 3c 2f 43 char a,b,c; }</C
2230: 4f 44 45 3e 0a 69 6e 20 72 65 67 69 73 74 65 72 ODE>.in register
2240: 73 20 61 6e 64 0a 3c 43 4f 44 45 3e 73 74 72 75 s and.<CODE>stru
2250: 63 74 20 7b 20 63 68 61 72 20 61 5b 33 5d 3b 20 ct { char a[3];
2260: 7d 3c 2f 43 4f 44 45 3e 0a 69 6e 20 6d 65 6d 6f }</CODE>.in memo
2270: 72 79 2c 20 61 6c 74 68 6f 75 67 68 20 62 6f 74 ry, although bot
2280: 68 20 74 79 70 65 73 20 68 61 76 65 20 74 68 65 h types have the
2290: 20 73 61 6d 65 20 73 69 7a 65 20 61 6e 64 20 74 same size and t
22a0: 68 65 20 73 61 6d 65 20 61 6c 69 67 6e 6d 65 6e he same alignmen
22b0: 74 2e 0a 3c 50 3e 0a 3c 43 4f 44 45 3e 26 6c 74 t..<P>.<CODE><
22c0: 3b 76 61 63 61 6c 6c 2e 68 26 67 74 3b 3c 2f 43 ;vacall.h></C
22d0: 4f 44 45 3e 20 63 61 6e 6e 6f 74 20 62 65 20 69 ODE> cannot be i
22e0: 6e 63 6c 75 64 65 64 20 20 77 68 65 6e 20 3c 43 ncluded when <C
22f0: 4f 44 45 3e 26 6c 74 3b 76 61 72 61 72 67 73 2e ODE><varargs.
2300: 68 26 67 74 3b 3c 2f 43 4f 44 45 3e 20 20 6f 72 h></CODE> or
2310: 0a 3c 43 4f 44 45 3e 26 6c 74 3b 73 74 64 61 72 .<CODE><stdar
2320: 67 2e 68 26 67 74 3b 3c 2f 43 4f 44 45 3e 20 69 g.h></CODE> i
2330: 73 20 69 6e 63 6c 75 64 65 64 2e 20 20 28 4e 61 s included. (Na
2340: 6d 65 20 63 6c 61 73 68 20 66 6f 72 20 3c 43 4f me clash for <CO
2350: 44 45 3e 76 61 5f 61 6c 69 73 74 3c 2f 43 4f 44 DE>va_alist</COD
2360: 45 3e 2e 29 0a 3c 50 3e 0a 54 68 65 20 61 72 67 E>.).<P>.The arg
2370: 75 6d 65 6e 74 20 6c 69 73 74 20 63 61 6e 20 6f ument list can o
2380: 6e 6c 79 20 62 65 20 77 61 6c 6b 65 64 20 6f 6e nly be walked on
2390: 63 65 2e 0a 3c 50 3e 0a 54 68 65 20 20 75 73 65 ce..<P>.The use
23a0: 20 20 6f 66 20 20 74 68 65 20 20 67 6c 6f 62 61 of the globa
23b0: 6c 20 20 76 61 72 69 61 62 6c 65 20 3c 43 4f 44 l variable <COD
23c0: 45 3e 76 61 63 61 6c 6c 5f 66 75 6e 63 74 69 6f E>vacall_functio
23d0: 6e 3c 2f 43 4f 44 45 3e 20 69 73 20 6e 6f 74 0a n</CODE> is not.
23e0: 72 65 65 6e 74 72 61 6e 74 2e 20 54 68 69 73 20 reentrant. This
23f0: 69 73 20 66 69 78 65 64 20 69 6e 20 74 68 65 20 is fixed in the
2400: 3c 41 20 48 52 45 46 3d 22 63 61 6c 6c 62 61 63 <A HREF="callbac
2410: 6b 28 33 29 22 3e 3c 43 4f 44 45 3e 3c 42 3e 63 k(3)"><CODE><B>c
2420: 61 6c 6c 62 61 63 6b 3c 2f 42 3e 3c 2f 43 4f 44 allback</B></COD
2430: 45 3e 3c 2f 41 3e 28 33 29 20 70 61 63 6b 61 67 E></A>(3) packag
2440: 65 2e 0a 0a 3c 41 20 4e 41 4d 45 3d 22 50 6f 72 e...<A NAME="Por
2450: 74 69 6e 67 22 3e 0a 3c 48 32 3e 50 6f 72 74 69 ting">.<H2>Porti
2460: 6e 67 3c 2f 48 32 3e 0a 3c 2f 41 3e 0a 0a 4b 6e ng</H2>.</A>..Kn
2470: 6f 77 6c 65 64 67 65 20 61 62 6f 75 74 20 61 72 owledge about ar
2480: 67 75 6d 65 6e 74 20 70 61 73 73 69 6e 67 20 63 gument passing c
2490: 6f 6e 76 65 6e 74 69 6f 6e 73 20 63 61 6e 20 62 onventions can b
24a0: 65 20 20 66 6f 75 6e 64 0a 69 6e 20 20 74 68 65 e found.in the
24b0: 20 20 67 63 63 20 73 6f 75 72 63 65 2c 20 66 69 gcc source, fi
24c0: 6c 65 0a 3c 53 41 4d 50 3e 67 63 63 2d 32 2e 36 le.<SAMP>gcc-2.6
24d0: 2e 33 2f 63 6f 6e 66 69 67 2f 3c 56 41 52 3e 63 .3/config/<VAR>c
24e0: 70 75 3c 2f 56 41 52 3e 2f 3c 56 41 52 3e 63 70 pu</VAR>/<VAR>cp
24f0: 75 3c 2f 56 41 52 3e 2e 68 3c 2f 53 41 4d 50 3e u</VAR>.h</SAMP>
2500: 2c 0a 73 65 63 74 69 6f 6e 20 22 53 74 61 63 6b ,.section "Stack
2510: 20 6c 61 79 6f 75 74 3b 20 66 75 6e 63 74 69 6f layout; functio
2520: 6e 20 65 6e 74 72 79 2c 20 65 78 69 74 20 61 6e n entry, exit an
2530: 64 20 63 61 6c 6c 69 6e 67 2e 22 0a 3c 50 3e 0a d calling.".<P>.
2540: 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 The implementati
2550: 6f 6e 20 6f 66 20 76 61 72 61 72 67 73 20 66 6f on of varargs fo
2560: 72 20 67 63 63 20 63 61 6e 20 62 65 20 66 6f 75 r gcc can be fou
2570: 6e 64 20 69 6e 20 20 74 68 65 0a 67 63 63 20 73 nd in the.gcc s
2580: 6f 75 72 63 65 2c 20 66 69 6c 65 73 20 3c 53 41 ource, files <SA
2590: 4d 50 3e 67 63 63 2d 32 2e 36 2e 33 2f 67 69 6e MP>gcc-2.6.3/gin
25a0: 63 6c 75 64 65 2f 76 61 2a 2e 68 3c 2f 53 41 4d clude/va*.h</SAM
25b0: 50 3e 2e 0a 3c 50 3e 0a 67 63 63 27 73 20 20 3c P>..<P>.gcc's <
25c0: 43 4f 44 45 3e 5f 5f 62 75 69 6c 74 69 6e 5f 73 CODE>__builtin_s
25d0: 61 76 65 72 65 67 73 28 29 3c 2f 43 4f 44 45 3e averegs()</CODE>
25e0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 function is def
25f0: 69 6e 65 64 20 69 6e 20 74 68 65 20 67 63 63 0a ined in the gcc.
2600: 73 6f 75 72 63 65 2c 20 66 69 6c 65 20 3c 53 41 source, file <SA
2610: 4d 50 3e 67 63 63 2d 32 2e 36 2e 33 2f 6c 69 62 MP>gcc-2.6.3/lib
2620: 67 63 63 32 2e 63 3c 2f 53 41 4d 50 3e 2e 0a 3c gcc2.c</SAMP>..<
2630: 50 3e 0a 0a 3c 41 20 4e 41 4d 45 3d 22 41 75 74 P>..<A NAME="Aut
2640: 68 6f 72 22 3e 0a 3c 48 32 3e 41 75 74 68 6f 72 hor">.<H2>Author
2650: 3c 2f 48 32 3e 0a 3c 2f 41 3e 0a 0a 42 72 75 6e </H2>.</A>..Brun
2660: 6f 20 48 61 69 62 6c 65 20 26 6c 74 3b 62 72 75 o Haible <bru
2670: 6e 6f 40 63 6c 69 73 70 2e 6f 72 67 26 67 74 3b no@clisp.org>
2680: 0a 0a 3c 41 20 4e 41 4d 45 3d 22 41 63 6b 6e 6f ..<A NAME="Ackno
2690: 77 6c 65 64 67 65 6d 65 6e 74 73 22 3e 0a 3c 48 wledgements">.<H
26a0: 32 3e 41 63 6b 6e 6f 77 6c 65 64 67 65 6d 65 6e 2>Acknowledgemen
26b0: 74 73 3c 2f 48 32 3e 0a 3c 2f 41 3e 0a 0a 4d 61 ts</H2>.</A>..Ma
26c0: 6e 79 20 69 64 65 61 73 20 61 6e 64 20 61 20 6c ny ideas and a l
26d0: 6f 74 20 6f 66 20 63 6f 64 65 20 77 65 72 65 20 ot of code were
26e0: 20 63 72 69 62 62 65 64 20 20 66 72 6f 6d 20 20 cribbed from
26f0: 74 68 65 20 20 67 63 63 0a 73 6f 75 72 63 65 2e the gcc.source.
2700: 0a 3c 50 3e 0a 0a 3c 48 52 3e 0a 0a 3c 41 44 44 .<P>..<HR>..<ADD
2710: 52 45 53 53 3e 56 41 43 41 4c 4c 20 6d 61 6e 75 RESS>VACALL manu
2720: 61 6c 20 70 61 67 65 3c 42 52 3e 0a 42 72 75 6e al page<BR>.Brun
2730: 6f 20 48 61 69 62 6c 65 20 26 6c 74 3b 62 72 75 o Haible <bru
2740: 6e 6f 40 63 6c 69 73 70 2e 6f 72 67 26 67 74 3b no@clisp.org>
2750: 0a 3c 2f 41 44 44 52 45 53 53 3e 0a 3c 50 3e 0a .</ADDRESS>.<P>.
2760: 4c 61 73 74 20 6d 6f 64 69 66 69 65 64 3a 20 31 Last modified: 1
2770: 34 20 4a 61 6e 75 61 72 79 20 32 30 30 31 2e 0a 4 January 2001..
2780: 0a 3c 2f 42 4f 44 59 3e 0a 0a .</BODY>..