<?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"
	>
<channel>
	<title>Comentarios en: Metaprogramación en C++ con macros</title>
	<atom:link href="http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/</link>
	<description>el blog de PpluX</description>
	<pubDate>Wed, 07 Jan 2009 01:09:22 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
		<item>
		<title>By: PpluX</title>
		<link>http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-4922</link>
		<dc:creator>PpluX</dc:creator>
		<pubDate>Sat, 11 Oct 2008 13:33:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-4922</guid>
		<description>He cambiado el link, hacia unos dos años de la entrada y no estaba actualizado 

http://svn.pplux.com/SLB/trunk/include/SLB/SPP.hpp</description>
		<content:encoded><![CDATA[<p>He cambiado el link, hacia unos dos años de la entrada y no estaba actualizado </p>
<p><a href="http://svn.pplux.com/SLB/trunk/include/SLB/SPP.hpp" rel="nofollow" >http://svn.pplux.com/SLB/trunk/include/SLB/SPP.hpp</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jale</title>
		<link>http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-4918</link>
		<dc:creator>jale</dc:creator>
		<pubDate>Fri, 10 Oct 2008 21:01:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-4918</guid>
		<description>Hola,

No tengo ni idea de como hacer una macro de este estilo SPP_ENUM_D(N,item), puedes poner el código de esta librerí SPP accesible?


gracias</description>
		<content:encoded><![CDATA[<p>Hola,</p>
<p>No tengo ni idea de como hacer una macro de este estilo SPP_ENUM_D(N,item), puedes poner el código de esta librerí SPP accesible?</p>
<p>gracias</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: elvis</title>
		<link>http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-4875</link>
		<dc:creator>elvis</dc:creator>
		<pubDate>Thu, 02 Oct 2008 04:34:58 +0000</pubDate>
		<guid isPermaLink="false">http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-4875</guid>
		<description>hola ante todo saludos! 

no soy programador cuando vi por accidente tu blog me intereso el tema y busque informacion del lenguaje c y esas cosas   desde mi punto de vista " aunque es buena la idea de hacerlo como lo planteas" tu solucion presenta varios problemas practicos entre ellos debes declarar previmente los posibles casos que aplican y no le das cierto grado de independencia al programa en mi caso empece por tratar de evitar hacer un funcion como lo hace en el archivo adicional .h y con un simple #define suma(a, b)	a + b "en el caso de querer sumar"y aplicarlo como una funcion cualquiera ya puedes sumar y asi para (a + b + c .....) y asi con multiplicaciones y varias cosas que hice para demostrarmelo incluso complicando un poco el asunto puede utilizar asignacion dinamica para hacerlo o  utilizar otras definiciones para realizar un macro realmente complejo aunque muy funcional. Con lo cual se confirma lo que dices de la dificutad de mantenerlo. lo otro es que de esta forma te evitas tener que ver en otro archivo una funcion super larga que no comprenderias a la larga! si quieres hacerlo modular lo pueder hacer en otro archivo pero ahorrando linea de codigo...</description>
		<content:encoded><![CDATA[<p>hola ante todo saludos! </p>
<p>no soy programador cuando vi por accidente tu blog me intereso el tema y busque informacion del lenguaje c y esas cosas   desde mi punto de vista &#8221; aunque es buena la idea de hacerlo como lo planteas&#8221; tu solucion presenta varios problemas practicos entre ellos debes declarar previmente los posibles casos que aplican y no le das cierto grado de independencia al programa en mi caso empece por tratar de evitar hacer un funcion como lo hace en el archivo adicional .h y con un simple #define suma(a, b)	a + b &#8220;en el caso de querer sumar&#8221;y aplicarlo como una funcion cualquiera ya puedes sumar y asi para (a + b + c &#8230;..) y asi con multiplicaciones y varias cosas que hice para demostrarmelo incluso complicando un poco el asunto puede utilizar asignacion dinamica para hacerlo o  utilizar otras definiciones para realizar un macro realmente complejo aunque muy funcional. Con lo cual se confirma lo que dices de la dificutad de mantenerlo. lo otro es que de esta forma te evitas tener que ver en otro archivo una funcion super larga que no comprenderias a la larga! si quieres hacerlo modular lo pueder hacer en otro archivo pero ahorrando linea de codigo&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pplux</title>
		<link>http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-4071</link>
		<dc:creator>pplux</dc:creator>
		<pubDate>Tue, 05 Feb 2008 21:31:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-4071</guid>
		<description>Hola Alberto, 
  Sí claro, el ejemplo tiene como fin ser ilustrativo, nada más. Sería una aberración usar esto tal cual para "sumar".

Yo lo uso únicamente para generalizar el número de parámetros de las plantillas, ya que estas generalizan bien el tipo pero no en número. Por ejmplo, para escribir wrappers de métodos y funciones las plantillas son ideales ya que por matching y especialización uno puede generar automáticamente código específico para una funcion dada de tipos desconocidos pero con número concreto de parámetros. Para generalizar el número en este caso sólo hay, hasta donde yo se, trucos con el preprocesador como este.</description>
		<content:encoded><![CDATA[<p>Hola Alberto,<br />
  Sí claro, el ejemplo tiene como fin ser ilustrativo, nada más. Sería una aberración usar esto tal cual para &#8220;sumar&#8221;.</p>
<p>Yo lo uso únicamente para generalizar el número de parámetros de las plantillas, ya que estas generalizan bien el tipo pero no en número. Por ejmplo, para escribir wrappers de métodos y funciones las plantillas son ideales ya que por matching y especialización uno puede generar automáticamente código específico para una funcion dada de tipos desconocidos pero con número concreto de parámetros. Para generalizar el número en este caso sólo hay, hasta donde yo se, trucos con el preprocesador como este.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alberto</title>
		<link>http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-4069</link>
		<dc:creator>Alberto</dc:creator>
		<pubDate>Tue, 05 Feb 2008 20:28:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-4069</guid>
		<description>Sé que el ejemplo es solo para fines ilustrativos pero no tendría mas sentido en ese case sobrecargar el operador + en lugar de tener una funcion para n elementos que van a ser sumados.
Asi solo tienes una funcion para "sumar" dos objetos que no necesariamente son enteros (claro que definiendo que significa sumar para esa clase)</description>
		<content:encoded><![CDATA[<p>Sé que el ejemplo es solo para fines ilustrativos pero no tendría mas sentido en ese case sobrecargar el operador + en lugar de tener una funcion para n elementos que van a ser sumados.<br />
Asi solo tienes una funcion para &#8220;sumar&#8221; dos objetos que no necesariamente son enteros (claro que definiendo que significa sumar para esa clase)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: PpluX</title>
		<link>http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-196</link>
		<dc:creator>PpluX</dc:creator>
		<pubDate>Tue, 09 May 2006 08:14:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-196</guid>
		<description>Hola Evelyn,
La diferencia entre macros y funciones es que las macros actúan en el preprocesado del fichero a compilar, es decir, antes de empezar a compilar el programa incluso antes de validar si un programa es o no correcto. Si usas un compilador como gcc/g   puedes con el atributo "-E" ver el efecto que causan las macros, sin compilar el programa. 

Por ejemplo un error típico del uso de macros:
#define SUMA(a,b) a b

cuando compilas una expresión como SUMA(5,3), se genera en tiempo de preproceso la expresión 5 3 que luego se compila y finalmente se ejecutará. Pero escribir las macros así puede ocasionar efectos no deseados, por ejemplo:

printf("%d",SUMA(4,6)*10)

uno esperaría si SUMA fuese una función, que primero se sumase los valores 4 y 6 y luego se multiplicase por 10, el resultado "(4 6)*10 = 100". Pero las macros, a diferencia de las funciones, se expanden  no se ejecutan. Esto es lo que hace el preprocesador:

printf("%d",SUMA(4,6)*10) -&gt; printf("%d",4 6*10)

el resultado es 64 y no 100, si SUMA hubiera sido una función y no una macro se hubiera ejecutado correctamente, por el contrario la macro se ha limitado a coger los parámetros y expandir su contenido. Espero que así veas la diferencia entre una macro y una función.

Por cierto, si se hubiera escrito la macro como se recomienda hacerlo, todo hubiera funcionado bien:
#define SUMA(a,b) ((a) (b))

En definitiva, las macros expanden código mientras que las funciones ejecutan código.

Respecto a los prefijos y sufijos que comentas, no se muy bien a qué te refieres, si esto de las macros no te lo aclara coméntalo con un ejemplo y algo más de detalle.</description>
		<content:encoded><![CDATA[<p>Hola Evelyn,<br />
La diferencia entre macros y funciones es que las macros actúan en el preprocesado del fichero a compilar, es decir, antes de empezar a compilar el programa incluso antes de validar si un programa es o no correcto. Si usas un compilador como gcc/g   puedes con el atributo &#8220;-E&#8221; ver el efecto que causan las macros, sin compilar el programa. </p>
<p>Por ejemplo un error típico del uso de macros:<br />
#define SUMA(a,b) a b</p>
<p>cuando compilas una expresión como SUMA(5,3), se genera en tiempo de preproceso la expresión 5 3 que luego se compila y finalmente se ejecutará. Pero escribir las macros así puede ocasionar efectos no deseados, por ejemplo:</p>
<p>printf(&#8221;%d&#8221;,SUMA(4,6)*10)</p>
<p>uno esperaría si SUMA fuese una función, que primero se sumase los valores 4 y 6 y luego se multiplicase por 10, el resultado &#8220;(4 6)*10 = 100&#8243;. Pero las macros, a diferencia de las funciones, se expanden  no se ejecutan. Esto es lo que hace el preprocesador:</p>
<p>printf(&#8221;%d&#8221;,SUMA(4,6)*10) -> printf(&#8221;%d&#8221;,4 6*10)</p>
<p>el resultado es 64 y no 100, si SUMA hubiera sido una función y no una macro se hubiera ejecutado correctamente, por el contrario la macro se ha limitado a coger los parámetros y expandir su contenido. Espero que así veas la diferencia entre una macro y una función.</p>
<p>Por cierto, si se hubiera escrito la macro como se recomienda hacerlo, todo hubiera funcionado bien:<br />
#define SUMA(a,b) ((a) (b))</p>
<p>En definitiva, las macros expanden código mientras que las funciones ejecutan código.</p>
<p>Respecto a los prefijos y sufijos que comentas, no se muy bien a qué te refieres, si esto de las macros no te lo aclara coméntalo con un ejemplo y algo más de detalle.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Evelyn</title>
		<link>http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-195</link>
		<dc:creator>Evelyn</dc:creator>
		<pubDate>Mon, 08 May 2006 20:03:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.pplux.com/2006/04/24/metaprogramacion-en-c-con-macros/#comment-195</guid>
		<description>hola, soy Evelyn de Chile, sabes que en la universidad me dieron una tarea con respecto a las macros, ¿cual es la diferencia entre usar macros y funciones?, nos dieron un ejemplo en el cual no retorna los mismos valores cuando se usan prefijos y sufijos   , --, sabes porque retornan valores distintos en algunas ocasiones?

Gracias por tu ayuda</description>
		<content:encoded><![CDATA[<p>hola, soy Evelyn de Chile, sabes que en la universidad me dieron una tarea con respecto a las macros, ¿cual es la diferencia entre usar macros y funciones?, nos dieron un ejemplo en el cual no retorna los mismos valores cuando se usan prefijos y sufijos   , &#8211;, sabes porque retornan valores distintos en algunas ocasiones?</p>
<p>Gracias por tu ayuda</p>
]]></content:encoded>
	</item>
</channel>
</rss>
