<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
va_arg [C++ Reference]
</title>
<meta name="generator" content="DokuWiki Release 2009-12-25c "Lemming"" />
<meta name="robots" content="index,follow" />
<meta name="date" content="2009-05-25T22:23:40-0700" />
<meta name="keywords" content="c,other,va_arg" />
<link rel="search" type="application/opensearchdescription+xml" href="/wiki/lib/exe/opensearch.php" title="C++ Reference" />
<link rel="start" href="/wiki/" />
<link rel="contents" href="/wiki/c/other/va_arg?do=index" title="Index" />
<link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/wiki/feed.php" />
<link rel="alternate" type="application/rss+xml" title="Current Namespace" href="/wiki/feed.php?mode=list&ns=c:other" />
<link rel="edit" title="Edit this page" href="/wiki/c/other/va_arg?do=edit" />
<link rel="alternate" type="text/html" title="Plain HTML" href="/wiki/_export/xhtml/c/other/va_arg" />
<link rel="alternate" type="text/plain" title="Wiki Markup" href="/wiki/_export/raw/c/other/va_arg" />
<link rel="canonical" href="http://www.cppreference.com/wiki/c/other/va_arg" />
<link rel="stylesheet" media="all" type="text/css" href="/wiki/lib/exe/css.php?s=all&t=custom1&tseed=1272971091" />
<link rel="stylesheet" media="screen" type="text/css" href="/wiki/lib/exe/css.php?t=custom1&tseed=1272971091" />
<link rel="stylesheet" media="print" type="text/css" href="/wiki/lib/exe/css.php?s=print&t=custom1&tseed=1272971091" />
<script type="text/javascript" charset="utf-8" ><!--//--><![CDATA[//><!--
var NS='c:other';var JSINFO = {"id":"c:other:va_arg","namespace":"c:other"};
//--><!]]></script>
<script type="text/javascript" charset="utf-8" src="/wiki/lib/exe/js.php?tseed=1272971091" ></script>
<link rel="shortcut icon" href="/wiki/lib/tpl/custom1/images/favicon.png" />
</head>
<body>
<div class="dokuwiki">
<div class="stylehead">
<div class="header">
<div class="pagename">
[[<a href="../../c/other/va_arg.html" title="Backlinks">va_arg</a>]]
</div>
<div class="logo">
<a href="http://www.cppreference.com" name="dokuwiki__top" id="dokuwiki__top" accesskey="h" title="[ALT+H]">C++ Reference</a> </div>
<div class="clearer"></div>
</div>
<div class="breadcrumbs">
<span class="bchead">You are here: </span><a href="../../start.html" title="start">C++ Reference</a> » <a href="../../c/start.html" title="c:start">The Standard C Library</a> » <a href="../../c/other/start.html" title="c:other:start">Other Standard C Functions</a> » <a href="../../c/other/va_arg.html" title="c:other:va_arg">va_arg</a> </div>
</div>
<div class="plugin_translation"><span>Translations of this page<sup><a href="../../localization.html" class="wikilink1" title="localization">?</a></sup>:</span> <ul> <li><div class="li"><span class="curid"><a href="../../c/other/va_arg.html" class="wikilink1" title="c:other:va_arg">en</a></span></div></li> <li><div class="li"><a href="../../br-pt/c/other/va_arg.html" class="wikilink2" title="br-pt:c:other:va_arg" rel="nofollow">br-pt</a></div></li> <li><div class="li"><a href="../../cn/c/other/va_arg.html" class="wikilink2" title="cn:c:other:va_arg" rel="nofollow">cn</a></div></li> <li><div class="li"><a href="../../cz/c/other/va_arg.html" class="wikilink2" title="cz:c:other:va_arg" rel="nofollow">cz</a></div></li> <li><div class="li"><a href="../../de/c/other/va_arg.html" class="wikilink2" title="de:c:other:va_arg" rel="nofollow">de</a></div></li> <li><div class="li"><a href="../../es/c/other/va_arg.html" class="wikilink2" title="es:c:other:va_arg" rel="nofollow">es</a></div></li> <li><div class="li"><a href="../../fr/c/other/va_arg.html" class="wikilink2" title="fr:c:other:va_arg" rel="nofollow">fr</a></div></li> <li><div class="li"><a href="../../it/c/other/va_arg.html" class="wikilink2" title="it:c:other:va_arg" rel="nofollow">it</a></div></li> <li><div class="li"><a href="../../jp/c/other/va_arg.html" class="wikilink1" title="jp:c:other:va_arg">jp</a></div></li> <li><div class="li"><a href="../../nl/c/other/va_arg.html" class="wikilink2" title="nl:c:other:va_arg" rel="nofollow">nl</a></div></li> <li><div class="li"><a href="../../pl/c/other/va_arg.html" class="wikilink2" title="pl:c:other:va_arg" rel="nofollow">pl</a></div></li> <li><div class="li"><a href="../../ro/c/other/va_arg.html" class="wikilink2" title="ro:c:other:va_arg" rel="nofollow">ro</a></div></li> <li><div class="li"><a href="../../ru/c/other/va_arg.html" class="wikilink2" title="ru:c:other:va_arg" rel="nofollow">ru</a></div></li> <li><div class="li"><a href="../../sk/c/other/va_arg.html" class="wikilink2" title="sk:c:other:va_arg" rel="nofollow">sk</a></div></li> <li><div class="li"><a href="../../tr/c/other/va_arg.html" class="wikilink2" title="tr:c:other:va_arg" rel="nofollow">tr</a></div></li> <li><div class="li"><a href="../../tw/c/other/va_arg.html" class="wikilink2" title="tw:c:other:va_arg" rel="nofollow">tw</a></div></li></ul></div>
<div class="page">
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2828341-1";
urchinTracker();
</script>
<!-- wikipage start -->
<h2><a name="va_arg" id="va_arg">va_arg</a></h2>
<div class="level2">
<p>
Syntax:
</p>
<pre class="c code c++" style="font-family:monospace;"> <span class="co2">#include <cstdarg></span>
type va_arg<span class="br0">(</span> va_list argptr<span class="sy0">,</span> type <span class="br0">)</span><span class="sy0">;</span>
<span class="kw4">void</span> va_end<span class="br0">(</span> va_list argptr <span class="br0">)</span><span class="sy0">;</span>
<span class="kw4">void</span> va_start<span class="br0">(</span> va_list argptr<span class="sy0">,</span> last_parm <span class="br0">)</span><span class="sy0">;</span></pre>
<p>
The va_arg() macros are used to pass a variable number of arguments to a
function.
</p>
<ol>
<li class="level1"><div class="li"> First, you must have a call to va_start() passing a valid va_list and the mandatory argument that directly precedes the '…' argument of the function. If you only have one mandatory argument, it is that argument. You must have at least one mandatory argument. This argument can be anything; one way to use it is to have it be an integer describing the number of parameters being passed.</div>
</li>
<li class="level1"><div class="li"> Next, you call va_arg() passing the va_list and the type of the argument to be returned. The return value of va_arg() is the current parameter.</div>
</li>
<li class="level1"><div class="li"> Repeat calls to va_arg() for however many arguments you have.</div>
</li>
<li class="level1"><div class="li"> Finally, a call to va_end() passing the va_list is necessary for proper cleanup.</div>
</li>
</ol>
<p>
For example:
</p>
<pre class="c code c++" style="font-family:monospace;"> <span class="kw4">int</span> sum<span class="br0">(</span> <span class="kw4">int</span> num<span class="sy0">,</span> ... <span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">int</span> answer <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
va_list argptr<span class="sy0">;</span>
va_start<span class="br0">(</span> argptr<span class="sy0">,</span> num <span class="br0">)</span><span class="sy0">;</span>
<span class="kw1">for</span><span class="br0">(</span> <span class="sy0">;</span> num <span class="sy0">></span> <span class="nu0">0</span><span class="sy0">;</span> num<span class="sy0">--</span> <span class="br0">)</span> <span class="br0">{</span>
answer <span class="sy0">+=</span> va_arg<span class="br0">(</span> argptr<span class="sy0">,</span> <span class="kw4">int</span> <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
va_end<span class="br0">(</span> argptr <span class="br0">)</span><span class="sy0">;</span>
<span class="kw1">return</span><span class="br0">(</span> answer <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
<span class="kw4">int</span> main<span class="br0">(</span> <span class="kw4">void</span> <span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">int</span> answer <span class="sy0">=</span> sum<span class="br0">(</span> 4<span class="sy0">,</span> 4<span class="sy0">,</span> 3<span class="sy0">,</span> 2<span class="sy0">,</span> 1 <span class="br0">)</span><span class="sy0">;</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span> <span class="st0">"The answer is %d<span class="es1">\n</span>"</span><span class="sy0">,</span> answer <span class="br0">)</span><span class="sy0">;</span>
<span class="kw1">return</span><span class="br0">(</span> 0 <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span></pre>
<p>
This code displays 10, which is 4+3+2+1.
</p>
<p>
Here is another example of variable argument function, which is a simple
printing function:
</p>
<pre class="c code c++" style="font-family:monospace;"> <span class="kw4">void</span> my_printf<span class="br0">(</span> <span class="kw4">char</span> <span class="sy0">*</span>format<span class="sy0">,</span> ... <span class="br0">)</span> <span class="br0">{</span>
va_list argptr<span class="sy0">;</span>
va_start<span class="br0">(</span> argptr<span class="sy0">,</span> format <span class="br0">)</span><span class="sy0">;</span>
<span class="kw1">while</span><span class="br0">(</span> <span class="sy0">*</span>format <span class="sy0">!=</span> <span class="st0">'<span class="es5">\0</span>'</span> <span class="br0">)</span> <span class="br0">{</span>
<span class="co1">// string</span>
<span class="kw1">if</span><span class="br0">(</span> <span class="sy0">*</span>format <span class="sy0">==</span> <span class="st0">'s'</span> <span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">char</span><span class="sy0">*</span> s <span class="sy0">=</span> va_arg<span class="br0">(</span> argptr<span class="sy0">,</span> <span class="kw4">char</span> <span class="sy0">*</span> <span class="br0">)</span><span class="sy0">;</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span> <span class="st0">"Printing a string: %s<span class="es1">\n</span>"</span><span class="sy0">,</span> s <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
<span class="co1">// character</span>
<span class="kw1">else</span> <span class="kw1">if</span><span class="br0">(</span> <span class="sy0">*</span>format <span class="sy0">==</span> <span class="st0">'c'</span> <span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">char</span> c <span class="sy0">=</span> <span class="br0">(</span><span class="kw4">char</span><span class="br0">)</span> va_arg<span class="br0">(</span> argptr<span class="sy0">,</span> <span class="kw4">int</span> <span class="br0">)</span><span class="sy0">;</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span> <span class="st0">"Printing a character: %c<span class="es1">\n</span>"</span><span class="sy0">,</span> c <span class="br0">)</span><span class="sy0">;</span>
<span class="kw2">break</span><span class="sy0">;</span>
<span class="br0">}</span>
<span class="co1">// integer</span>
<span class="kw1">else</span> <span class="kw1">if</span><span class="br0">(</span> <span class="sy0">*</span>format <span class="sy0">==</span> <span class="st0">'d'</span> <span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">int</span> d <span class="sy0">=</span> va_arg<span class="br0">(</span> argptr<span class="sy0">,</span> <span class="kw4">int</span> <span class="br0">)</span><span class="sy0">;</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span> <span class="st0">"Printing an integer: %d<span class="es1">\n</span>"</span><span class="sy0">,</span> d <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
format<span class="sy0">++;</span>
<span class="br0">}</span>
va_end<span class="br0">(</span> argptr <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
<span class="kw4">int</span> main<span class="br0">(</span> <span class="kw4">void</span> <span class="br0">)</span> <span class="br0">{</span>
my_printf<span class="br0">(</span> <span class="st0">"sdc"</span><span class="sy0">,</span> <span class="st0">"This is a string"</span><span class="sy0">,</span> <span class="nu0">29</span><span class="sy0">,</span> <span class="st0">'X'</span> <span class="br0">)</span><span class="sy0">;</span>
<span class="kw1">return</span><span class="br0">(</span> 0 <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span></pre>
<p>
This code displays the following output when run:
</p>
<pre class="code">
Printing a string: This is a string
Printing an integer: 29
Printing a character: X</pre>
</div>
<div class="secedit"><form class="button btn_secedit" method="post" action="/wiki/c/other/va_arg"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="lines" value="3-" /><input type="hidden" name="rev" value="1243315420" /><input type="submit" value="Edit" class="button" title="va_arg" /></div></form></div>
<!-- wikipage stop -->
</div>
<div class="clearer"> </div>
<div class="stylefoot">
<div class="meta">
<div class="user">
</div>
<!--
<div class="doc">
c/other/va_arg.txt · Last modified: 05/25/2009 22:23 by 210.193.56.94 </div>
-->
</div>
<div class="bar" id="bar__bottom">
<div class="bar-left" id="bar__bottomleft">
<a href="../../c/other/va_arg.html" class="action edit" accesskey="e" rel="nofollow">Edit this page</a> •
<a href="../../c/other/va_arg.html" class="action revisions" accesskey="o" rel="nofollow">Old revisions</a> </div>
<div class="bar-right" id="bar__bottomright">
•
•
•
<a href="../../c/other/va_arg.html" class="action login" rel="nofollow">Login</a> •
<a href="../../c/other/va_arg.html" class="action index" accesskey="x" rel="nofollow">Index</a> •
<a href="../../c/other/va_arg.html" class="action recent" accesskey="r" rel="nofollow">Recent changes</a> •
<a href="../../feed.php.html" title="Recent changes RSS feed">RSS</a> •
<a href='http://creativecommons.org/licenses/by/3.0/us/' title='Creative Commons license'>cc</a> •
<form action="/wiki/" accept-charset="utf-8" class="search" id="dw__search"><div class="no"><input type="hidden" name="do" value="search" /><input type="text" id="qsearch__in" accesskey="f" name="id" class="edit" title="[ALT+F]" /><input type="submit" value="Search" class="button" title="Search" /><div id="qsearch__out" class="ajax_qsearch JSpopup"></div></div></form>
</div>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="no"><img src="/wiki/lib/exe/indexer.php?id=c%3Aother%3Ava_arg&1273194999" width="1" height="1" alt="" /></div>
</body>
</html>