<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: C: varargs com macros no gcc</title>
	<atom:link href="http://codare.net/2007/01/03/c-varargs-com-macros-no-gcc/feed/" rel="self" type="application/rss+xml" />
	<link>http://codare.net/2007/01/03/c-varargs-com-macros-no-gcc/</link>
	<description>Programadores, uni-vos!</description>
	<lastBuildDate>Wed, 16 May 2012 12:39:54 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Silveira Neto</title>
		<link>http://codare.net/2007/01/03/c-varargs-com-macros-no-gcc/#comment-211</link>
		<dc:creator>Silveira Neto</dc:creator>
		<pubDate>Mon, 18 Jun 2007 02:53:23 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/2007/01/03/varargs-com-macros-no-gcc/#comment-211</guid>
		<description>Muito interessante.
Embora o comentário do Arnaldo sobre o gccismo seja muito legal também, eu prefiro o que é padrão.</description>
		<content:encoded><![CDATA[<p>Muito interessante.<br />
Embora o comentário do Arnaldo sobre o gccismo seja muito legal também, eu prefiro o que é padrão.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Arnaldo Carvalho de Melo</title>
		<link>http://codare.net/2007/01/03/c-varargs-com-macros-no-gcc/#comment-210</link>
		<dc:creator>Arnaldo Carvalho de Melo</dc:creator>
		<pubDate>Sat, 19 May 2007 21:36:01 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/2007/01/03/varargs-com-macros-no-gcc/#comment-210</guid>
		<description>Yup, é um gccismo. Trecho da &lt;a href=&quot;http://www.delorie.com/gnu/docs/gcc/gcc_44.html&quot; rel=&quot;nofollow&quot;&gt;documentação&lt;/a&gt;:


GCC has long supported variadic macros, and used a different syntax that allowed you to give a name to the variable arguments just like any other argument. Here is an example:



#define debug(format, args...) fprintf (stderr, format, args)

This is in all ways equivalent to the ISO C example above, but arguably more readable and descriptive.


Prefiro o gccismo :-)</description>
		<content:encoded><![CDATA[<p>Yup, é um gccismo. Trecho da <a href="http://www.delorie.com/gnu/docs/gcc/gcc_44.html" rel="nofollow">documentação</a>:</p>
<p>GCC has long supported variadic macros, and used a different syntax that allowed you to give a name to the variable arguments just like any other argument. Here is an example:</p>
<p>#define debug(format, args&#8230;) fprintf (stderr, format, args)</p>
<p>This is in all ways equivalent to the ISO C example above, but arguably more readable and descriptive.</p>
<p>Prefiro o gccismo :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Arnaldo Carvalho de Melo</title>
		<link>http://codare.net/2007/01/03/c-varargs-com-macros-no-gcc/#comment-209</link>
		<dc:creator>Arnaldo Carvalho de Melo</dc:creator>
		<pubDate>Sat, 19 May 2007 21:28:05 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/2007/01/03/varargs-com-macros-no-gcc/#comment-209</guid>
		<description>Vivendo e aprendendo. Eu desconhecia a existência da palavra-chave __VA_ARGS__. Sempre usei a seguinte forma:

#define dprint(fmt, args...)  printf(&quot;%s: &quot; fmt, __func__, ##args)

Onde &#039;args&#039; pode ser qualquer coisa, &#039;argumentos&#039; se preferir em português :-)

Agora fiquei curioso, seria isto um gccismo? vou ler a documentação...</description>
		<content:encoded><![CDATA[<p>Vivendo e aprendendo. Eu desconhecia a existência da palavra-chave __VA_ARGS__. Sempre usei a seguinte forma:</p>
<p>#define dprint(fmt, args&#8230;)  printf(&#8220;%s: &#8221; fmt, __func__, ##args)</p>
<p>Onde &#8216;args&#8217; pode ser qualquer coisa, &#8216;argumentos&#8217; se preferir em português :-)</p>
<p>Agora fiquei curioso, seria isto um gccismo? vou ler a documentação&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Adenilson Cavalcanti</title>
		<link>http://codare.net/2007/01/03/c-varargs-com-macros-no-gcc/#comment-208</link>
		<dc:creator>Adenilson Cavalcanti</dc:creator>
		<pubDate>Thu, 15 Feb 2007 12:31:12 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/2007/01/03/varargs-com-macros-no-gcc/#comment-208</guid>
		<description>Alfredo

Acho que valeria a pena um post sobre varargs, é uma técnica muito útil.
:-)

eljunior: Sobre o suporte ao C99: http://gcc.gnu.org/gcc-4.1/c99status.html
(onde pode-se ver que existem itens que faltam ser implementados ou estão simplesmente *quebrados*).

É sempre uma tática segura usar o padrão ANSI por ser melhor suportado na maioria dos compiladores/plataformas.


Adenilson</description>
		<content:encoded><![CDATA[<p>Alfredo</p>
<p>Acho que valeria a pena um post sobre varargs, é uma técnica muito útil.<br />
:-)</p>
<p>eljunior: Sobre o suporte ao C99: <a href="http://gcc.gnu.org/gcc-4.1/c99status.html" rel="nofollow">http://gcc.gnu.org/gcc-4.1/c99status.html</a><br />
(onde pode-se ver que existem itens que faltam ser implementados ou estão simplesmente *quebrados*).</p>
<p>É sempre uma tática segura usar o padrão ANSI por ser melhor suportado na maioria dos compiladores/plataformas.</p>
<p>Adenilson</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alfredo Kojima</title>
		<link>http://codare.net/2007/01/03/c-varargs-com-macros-no-gcc/#comment-207</link>
		<dc:creator>Alfredo Kojima</dc:creator>
		<pubDate>Tue, 23 Jan 2007 12:51:28 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/2007/01/03/varargs-com-macros-no-gcc/#comment-207</guid>
		<description>Normalmente o método que você quer é o de varargs (i.e.: para escrever funcões que recebem número variável de parâmetros). Nesse caso a dica era sobre macros, para ser usado em casos específicos e os 2 não são intercambiáveis. Mas é uma boa idéia escrever um outro post sobre varargs propriamente dito :)</description>
		<content:encoded><![CDATA[<p>Normalmente o método que você quer é o de varargs (i.e.: para escrever funcões que recebem número variável de parâmetros). Nesse caso a dica era sobre macros, para ser usado em casos específicos e os 2 não são intercambiáveis. Mas é uma boa idéia escrever um outro post sobre varargs propriamente dito :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: eljunior</title>
		<link>http://codare.net/2007/01/03/c-varargs-com-macros-no-gcc/#comment-206</link>
		<dc:creator>eljunior</dc:creator>
		<pubDate>Thu, 11 Jan 2007 19:33:23 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/2007/01/03/varargs-com-macros-no-gcc/#comment-206</guid>
		<description>me referi à  __VA_ARGS__ (apresentada no post), não à va_copy.

__VA_ARGS__ também é ISO C99:

http://www.comeaucomputing.com/techtalk/c99/#variadicmacros

ou seja: improvável alguma diferença de portabilidade entre os dois modos... ;)</description>
		<content:encoded><![CDATA[<p>me referi à  __VA_ARGS__ (apresentada no post), não à va_copy.</p>
<p>__VA_ARGS__ também é ISO C99:</p>
<p><a href="http://www.comeaucomputing.com/techtalk/c99/#variadicmacros" rel="nofollow">http://www.comeaucomputing.com/techtalk/c99/#variadicmacros</a></p>
<p>ou seja: improvável alguma diferença de portabilidade entre os dois modos&#8230; ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Adenilson Cavalcanti</title>
		<link>http://codare.net/2007/01/03/c-varargs-com-macros-no-gcc/#comment-205</link>
		<dc:creator>Adenilson Cavalcanti</dc:creator>
		<pubDate>Thu, 11 Jan 2007 17:41:01 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/2007/01/03/varargs-com-macros-no-gcc/#comment-205</guid>
		<description>eljunior

From the fine manual:  $man va_start

...

CONFORMING TO
       The  va_start(),  va_arg(),  and  va_end()  macros  conform   to   ANSI
       X3.159-1989 (‘‘C89’’).  C99 defines the va_copy() macro.

...</description>
		<content:encoded><![CDATA[<p>eljunior</p>
<p>From the fine manual:  $man va_start</p>
<p>&#8230;</p>
<p>CONFORMING TO<br />
       The  va_start(),  va_arg(),  and  va_end()  macros  conform   to   ANSI<br />
       X3.159-1989 (‘‘C89’’).  C99 defines the va_copy() macro.</p>
<p>&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: eljunior</title>
		<link>http://codare.net/2007/01/03/c-varargs-com-macros-no-gcc/#comment-204</link>
		<dc:creator>eljunior</dc:creator>
		<pubDate>Thu, 11 Jan 2007 14:41:06 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/2007/01/03/varargs-com-macros-no-gcc/#comment-204</guid>
		<description>que eu saiba __VA_ARGS__ foi apresentado no C99...</description>
		<content:encoded><![CDATA[<p>que eu saiba __VA_ARGS__ foi apresentado no C99&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Adenilson Cavalcanti</title>
		<link>http://codare.net/2007/01/03/c-varargs-com-macros-no-gcc/#comment-203</link>
		<dc:creator>Adenilson Cavalcanti</dc:creator>
		<pubDate>Thu, 04 Jan 2007 17:28:16 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/2007/01/03/varargs-com-macros-no-gcc/#comment-203</guid>
		<description>Segue um exemplo de uso:

#include &lt;stdarg.h&gt;
#include &lt;stdio.h&gt;

int add_em_up (int count,...)
{
	va_list ap;
	int i, sum;

	va_start (ap, count);         /* Initialize the argument list. */

	sum = 0;
	for (i = 0; i &lt; count; i++)
		sum += va_arg (ap, int);    /* Get the next argument value. */

	va_end (ap);                  /* Clean up. */
	return sum;
}

int main (void)
{
	/* This call prints 16. */
	printf (&quot;%d\n&quot;, add_em_up (3, 5, 5, 6));

	/* This call prints 55. */
	printf (&quot;%d\n&quot;, add_em_up (10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10));

	return 0;
}</description>
		<content:encoded><![CDATA[<p>Segue um exemplo de uso:</p>
<p>#include &lt;stdarg.h&gt;<br />
#include &lt;stdio.h&gt;</p>
<p>int add_em_up (int count,&#8230;)<br />
{<br />
	va_list ap;<br />
	int i, sum;</p>
<p>	va_start (ap, count);         /* Initialize the argument list. */</p>
<p>	sum = 0;<br />
	for (i = 0; i &lt; count; i++)<br />
		sum += va_arg (ap, int);    /* Get the next argument value. */</p>
<p>	va_end (ap);                  /* Clean up. */<br />
	return sum;<br />
}</p>
<p>int main (void)<br />
{<br />
	/* This call prints 16. */<br />
	printf (&#8220;%d\n&#8221;, add_em_up (3, 5, 5, 6));</p>
<p>	/* This call prints 55. */<br />
	printf (&#8220;%d\n&#8221;, add_em_up (10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10));</p>
<p>	return 0;<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Adenilson Cavalcanti</title>
		<link>http://codare.net/2007/01/03/c-varargs-com-macros-no-gcc/#comment-202</link>
		<dc:creator>Adenilson Cavalcanti</dc:creator>
		<pubDate>Thu, 04 Jan 2007 16:37:29 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/2007/01/03/varargs-com-macros-no-gcc/#comment-202</guid>
		<description>Amigo

Pelo que entendi, este mecanismo é dependente de uso de macros que talvez nao existam em outros compiladores.

A GNU C Library define um conjunto de funcoes que acredito sejam mais portáveis (ANSI C89 e ISO C99) presentes em stdarg.h. Um link para maiores informacoes: http://www.gnu.org/software/libc/manual/html_node/Variadic-Functions.html

Ou simplesmente &quot;$man stdarg.h&quot; para ver o manual da mesma.

Atenciosamente


Adenilson</description>
		<content:encoded><![CDATA[<p>Amigo</p>
<p>Pelo que entendi, este mecanismo é dependente de uso de macros que talvez nao existam em outros compiladores.</p>
<p>A GNU C Library define um conjunto de funcoes que acredito sejam mais portáveis (ANSI C89 e ISO C99) presentes em stdarg.h. Um link para maiores informacoes: <a href="http://www.gnu.org/software/libc/manual/html_node/Variadic-Functions.html" rel="nofollow">http://www.gnu.org/software/libc/manual/html_node/Variadic-Functions.html</a></p>
<p>Ou simplesmente &#8220;$man stdarg.h&#8221; para ver o manual da mesma.</p>
<p>Atenciosamente</p>
<p>Adenilson</p>
]]></content:encoded>
	</item>
</channel>
</rss>

