<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NeoEGM.com &#187; C/C++</title>
	<atom:link href="http://www.neoegm.com/tech/programming/c-cpp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.neoegm.com</link>
	<description>Knowledge is inside</description>
	<lastBuildDate>Mon, 08 Jul 2024 05:38:01 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.39</generator>
	<item>
		<title>Cómo compilar programas de consola en C++ que soporten caracteres especiales (ISO-8859-1)</title>
		<link>http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/</link>
		<comments>http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 05:00:24 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[ASCII]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Charset]]></category>
		<category><![CDATA[Compile]]></category>
		<category><![CDATA[DOS]]></category>
		<category><![CDATA[G++]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[Hard-coded]]></category>
		<category><![CDATA[iconv]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[ISO-8859-1]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[RAD]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Special Characters]]></category>
		<category><![CDATA[Strings]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=1000</guid>
		<description><![CDATA[El compilador GCC (o G++) no siempre trabaja con nuestro código fuente exáctamente de la forma en que nos gustaría. Esto especialmente sucede cuando hay caracteres especiales en juego (los que tienen un código ASCII mayor a 127). Tomemos el siguiente programa como ejemplo: Compilémoslo&#8230; Y ejecutémoslo&#8230; Podríamos fácilmente imaginarnos la salida&#8230; Pero&#8230; Esto es [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Clase Lista simple para C++">Clase Lista simple para C++ </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>El compilador GCC (o G++) no siempre trabaja con nuestro código fuente exáctamente de la forma en que nos gustaría. Esto especialmente sucede cuando hay caracteres especiales en juego (los que tienen un código ASCII mayor a 127).</p>
<p>Tomemos el siguiente programa como ejemplo:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
using std::cout;
using std::cin;
using std::endl;

#include &lt;string&gt;
using std::string;

int main()
{
	string sDummy;

	cout &lt;&lt; &quot;Por favor ingrese su contraseña: &quot;;
	cin &gt;&gt; sDummy;

	cout &lt;&lt; endl;
	cout &lt;&lt; &quot;Su contraseña es inválida, por favor verifíquela e inténtelo nuevamente. Ha ingresado: '&quot; &lt;&lt; sDummy &lt;&lt; &quot;'.&quot; &lt;&lt; endl;

	return 0;
}
</pre>
<p>Compilémoslo&#8230;</p>

<pre class="console">
g++ TestChars.cpp -o TestChars.exe
</pre>
<p>Y ejecutémoslo&#8230; Podríamos fácilmente imaginarnos la salida&#8230; Pero&#8230; Esto es lo que obtenemos:</p>

<pre class="console">
Por favor ingrese su contrase±a: contraseña

Su contrase±a es invßlida, por favor veriffquela e intTntelo nuevamente. Ha ingresado: 'contraseña'.
</pre>
<p>Notá que la cadena que acabamos de escribir (&#8220;contraseña&#8221;) se muestra correctamente, mientras que las que estaban escritas en el código no lo hacen.</p>
<p>Entonces&#8230; Qué podemos hacer?</p>
<p>Bueno, hay algunos parámetros del compilador que están para ayudarnos&#8230; Ellos son <a href="http://gcc.gnu.org/onlinedocs/cpp/Invocation.html#index-character-set_002c-input-178">finput-charset</a> y <a href="http://gcc.gnu.org/onlinedocs/cpp/Invocation.html#index-fexec_002dcharset-173">fexec-charset</a>&#8230;</p>
<p>Ambos toman como parámetro adicional un identificador de <em>set de caracteres (charset)</em> de los soportados por el compiler&#8230;</p>
<p>Para los interesados, acá está la salida de la lista de sets de caracteres soportados por la librería que utiliza GCC para hacer la conversión&#8230; Puede que no sean los mismos en todos los sistemas&#8230;</p>
<pre class="brush: plain; collapse: true; light: false; title: ; toolbar: true; notranslate">
# iconv --list
The following list contain all the coded character sets known.  This does not necessarily mean that all combinations of these names can be used for the FROM and TO command line parameters.  One coded character set can be listed with several different names (aliases).

437, 500, 500V1, 850, 851, 852, 855, 856, 857, 860, 861, 862, 863, 864, 865, 866, 866NAV, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3, 8859_4, 8859_5, 8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993, 10646-1:1993/UCS4, ANSI_X3.4-1968, ANSI_X3.4-1986, ANSI_X3.4, ANSI_X3.110-1983, ANSI_X3.110, ARABIC, ARABIC7, ARMSCII-8, ASCII, ASMO-708, ASMO_449, BALTIC, BIG-5, BIG-FIVE, BIG5-HKSCS, BIG5, BIG5HKSCS, BIGFIVE, BRF, BS_4730, CA, CN-BIG5, CN-GB, CN, CP-AR, CP-GR, CP-HU, CP037, CP038, CP273, CP274, CP275, CP278, CP280, CP281, CP282, CP284, CP285, CP290, CP297, CP367, CP420, CP423, CP424, CP437, CP500, CP737, CP775, CP803, CP813, CP819, CP850, CP851, CP852, CP855, CP856, CP857, CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP866NAV, CP868, CP869, CP870, CP871, CP874, CP875, CP880, CP891, CP901, CP902, CP903, CP904, CP905, CP912, CP915, CP916, CP918, CP920, CP921, CP922, CP930, CP932, CP933, CP935, CP936, CP937, CP939, CP949, CP950, CP1004, CP1008, CP1025, CP1026, CP1046, CP1047, CP1070, CP1079, CP1081, CP1084, CP1089, CP1097, CP1112, CP1122, CP1123, CP1124, CP1125, CP1129, CP1130, CP1132, CP1133, CP1137, CP1140, CP1141, CP1142, CP1143, CP1144, CP1145, CP1146, CP1147, CP1148, CP1149, CP1153, CP1154, CP1155, CP1156, CP1157, CP1158, CP1160, CP1161, CP1162, CP1163, CP1164, CP1166, CP1167, CP1250, CP1251, CP1252, CP1253, CP1254, CP1255, CP1256, CP1257, CP1258, CP1282, CP1361, CP1364, CP1371, CP1388, CP1390, CP1399, CP4517, CP4899, CP4909, CP4971, CP5347, CP9030, CP9066, CP9448, CP10007, CP12712, CP16804, CPIBM861, CSA7-1, CSA7-2, CSASCII, CSA_T500-1983, CSA_T500, CSA_Z243.4-1985-1, CSA_Z243.4-1985-2, CSA_Z243.419851, CSA_Z243.419852, CSDECMCS, CSEBCDICATDE, CSEBCDICATDEA, CSEBCDICCAFR, CSEBCDICDKNO, CSEBCDICDKNOA, CSEBCDICES, CSEBCDICESA, CSEBCDICESS, CSEBCDICFISE, CSEBCDICFISEA, CSEBCDICFR, CSEBCDICIT, CSEBCDICPT, CSEBCDICUK, CSEBCDICUS, CSEUCKR, CSEUCPKDFMTJAPANESE, CSGB2312, CSHPROMAN8, CSIBM037, CSIBM038, CSIBM273, CSIBM274, CSIBM275, CSIBM277, CSIBM278, CSIBM280, CSIBM281, CSIBM284, CSIBM285, CSIBM290, CSIBM297, CSIBM420, CSIBM423, CSIBM424, CSIBM500, CSIBM803, CSIBM851, CSIBM855, CSIBM856, CSIBM857, CSIBM860, CSIBM863, CSIBM864, CSIBM865, CSIBM866, CSIBM868, CSIBM869, CSIBM870, CSIBM871, CSIBM880, CSIBM891, CSIBM901, CSIBM902, CSIBM903, CSIBM904, CSIBM905, CSIBM918, CSIBM921, CSIBM922, CSIBM930, CSIBM932, CSIBM933, CSIBM935, CSIBM937, CSIBM939, CSIBM943, CSIBM1008, CSIBM1025, CSIBM1026, CSIBM1097, CSIBM1112, CSIBM1122, CSIBM1123, CSIBM1124, CSIBM1129, CSIBM1130, CSIBM1132, CSIBM1133, CSIBM1137, CSIBM1140, CSIBM1141, CSIBM1142, CSIBM1143, CSIBM1144, CSIBM1145, CSIBM1146, CSIBM1147, CSIBM1148, CSIBM1149, CSIBM1153, CSIBM1154, CSIBM1155, CSIBM1156, CSIBM1157, CSIBM1158, CSIBM1160, CSIBM1161, CSIBM1163, CSIBM1164, CSIBM1166, CSIBM1167, CSIBM1364, CSIBM1371, CSIBM1388, CSIBM1390, CSIBM1399, CSIBM4517, CSIBM4899, CSIBM4909, CSIBM4971, CSIBM5347, CSIBM9030, CSIBM9066, CSIBM9448, CSIBM12712, CSIBM16804, CSIBM11621162, CSISO4UNITEDKINGDOM, CSISO10SWEDISH, CSISO11SWEDISHFORNAMES, CSISO14JISC6220RO, CSISO15ITALIAN, CSISO16PORTUGESE, CSISO17SPANISH, CSISO18GREEK7OLD, CSISO19LATINGREEK, CSISO21GERMAN, CSISO25FRENCH, CSISO27LATINGREEK1, CSISO49INIS, CSISO50INIS8, CSISO51INISCYRILLIC, CSISO58GB1988, CSISO60DANISHNORWEGIAN, CSISO60NORWEGIAN1, CSISO61NORWEGIAN2, CSISO69FRENCH, CSISO84PORTUGUESE2, CSISO85SPANISH2, CSISO86HUNGARIAN, CSISO88GREEK7, CSISO89ASMO449, CSISO90, CSISO92JISC62991984B, CSISO99NAPLPS, CSISO103T618BIT, CSISO111ECMACYRILLIC, CSISO121CANADIAN1, CSISO122CANADIAN2, CSISO139CSN369103, CSISO141JUSIB1002, CSISO143IECP271, CSISO150, CSISO150GREEKCCITT, CSISO151CUBA, CSISO153GOST1976874, CSISO646DANISH, CSISO2022CN, CSISO2022JP, CSISO2022JP2, CSISO2022KR, CSISO2033, CSISO5427CYRILLIC, CSISO5427CYRILLIC1981, CSISO5428GREEK, CSISO10367BOX, CSISOLATIN1, CSISOLATIN2, CSISOLATIN3, CSISOLATIN4, CSISOLATIN5, CSISOLATIN6, CSISOLATINARABIC, CSISOLATINCYRILLIC, CSISOLATINGREEK, CSISOLATINHEBREW, CSKOI8R, CSKSC5636, CSMACINTOSH, CSNATSDANO, CSNATSSEFI, CSN_369103, CSPC8CODEPAGE437, CSPC775BALTIC, CSPC850MULTILINGUAL, CSPC862LATINHEBREW, CSPCP852, CSSHIFTJIS, CSUCS4, CSUNICODE, CSWINDOWS31J, CUBA, CWI-2, CWI, CYRILLIC, DE, DEC-MCS, DEC, DECMCS, DIN_66003, DK, DS2089, DS_2089, E13B, EBCDIC-AT-DE-A, EBCDIC-AT-DE, EBCDIC-BE, EBCDIC-BR, EBCDIC-CA-FR, EBCDIC-CP-AR1, EBCDIC-CP-AR2, EBCDIC-CP-BE, EBCDIC-CP-CA, EBCDIC-CP-CH, EBCDIC-CP-DK, EBCDIC-CP-ES, EBCDIC-CP-FI, EBCDIC-CP-FR, EBCDIC-CP-GB, EBCDIC-CP-GR, EBCDIC-CP-HE, EBCDIC-CP-IS, EBCDIC-CP-IT, EBCDIC-CP-NL, EBCDIC-CP-NO, EBCDIC-CP-ROECE, EBCDIC-CP-SE, EBCDIC-CP-TR, EBCDIC-CP-US, EBCDIC-CP-WT, EBCDIC-CP-YU, EBCDIC-CYRILLIC, EBCDIC-DK-NO-A, EBCDIC-DK-NO, EBCDIC-ES-A, EBCDIC-ES-S, EBCDIC-ES, EBCDIC-FI-SE-A, EBCDIC-FI-SE, EBCDIC-FR, EBCDIC-GREEK, EBCDIC-INT, EBCDIC-INT1, EBCDIC-IS-FRISS, EBCDIC-IT, EBCDIC-JP-E, EBCDIC-JP-KANA, EBCDIC-PT, EBCDIC-UK, EBCDIC-US, EBCDICATDE, EBCDICATDEA, EBCDICCAFR, EBCDICDKNO, EBCDICDKNOA, EBCDICES, EBCDICESA, EBCDICESS, EBCDICFISE, EBCDICFISEA, EBCDICFR, EBCDICISFRISS, EBCDICIT, EBCDICPT, EBCDICUK, EBCDICUS, ECMA-114, ECMA-118, ECMA-128, ECMA-CYRILLIC, ECMACYRILLIC, ELOT_928, ES, ES2, EUC-CN, EUC-JISX0213, EUC-JP-MS, EUC-JP, EUC-KR, EUC-TW, EUCCN, EUCJP-MS, EUCJP-OPEN, EUCJP-WIN, EUCJP, EUCKR, EUCTW, FI, FR, GB, GB2312, GB13000, GB18030, GBK, GB_1988-80, GB_198880, GEORGIAN-ACADEMY, GEORGIAN-PS, GOST_19768-74, GOST_19768, GOST_1976874, GREEK-CCITT, GREEK, GREEK7-OLD, GREEK7, GREEK7OLD, GREEK8, GREEKCCITT, HEBREW, HP-GREEK8, HP-ROMAN8, HP-ROMAN9, HP-THAI8, HP-TURKISH8, HPGREEK8, HPROMAN8, HPROMAN9, HPTHAI8, HPTURKISH8, HU, IBM-803, IBM-856, IBM-901, IBM-902, IBM-921, IBM-922, IBM-930, IBM-932, IBM-933, IBM-935, IBM-937, IBM-939, IBM-943, IBM-1008, IBM-1025, IBM-1046, IBM-1047, IBM-1097, IBM-1112, IBM-1122, IBM-1123, IBM-1124, IBM-1129, IBM-1130, IBM-1132, IBM-1133, IBM-1137, IBM-1140, IBM-1141, IBM-1142, IBM-1143, IBM-1144, IBM-1145, IBM-1146, IBM-1147, IBM-1148, IBM-1149, IBM-1153, IBM-1154, IBM-1155, IBM-1156, IBM-1157, IBM-1158, IBM-1160, IBM-1161, IBM-1162, IBM-1163, IBM-1164, IBM-1166, IBM-1167, IBM-1364, IBM-1371, IBM-1388, IBM-1390, IBM-1399, IBM-4517, IBM-4899, IBM-4909, IBM-4971, IBM-5347, IBM-9030, IBM-9066, IBM-9448, IBM-12712, IBM-16804, IBM037, IBM038, IBM256, IBM273, IBM274, IBM275, IBM277, IBM278, IBM280, IBM281, IBM284, IBM285, IBM290, IBM297, IBM367, IBM420, IBM423, IBM424, IBM437, IBM500, IBM775, IBM803, IBM813, IBM819, IBM848, IBM850, IBM851, IBM852, IBM855, IBM856, IBM857, IBM860, IBM861, IBM862, IBM863, IBM864, IBM865, IBM866, IBM866NAV, IBM868, IBM869, IBM870, IBM871, IBM874, IBM875, IBM880, IBM891, IBM901, IBM902, IBM903, IBM904, IBM905, IBM912, IBM915, IBM916, IBM918, IBM920, IBM921, IBM922, IBM930, IBM932, IBM933, IBM935, IBM937, IBM939, IBM943, IBM1004, IBM1008, IBM1025, IBM1026, IBM1046, IBM1047, IBM1089, IBM1097, IBM1112, IBM1122, IBM1123, IBM1124, IBM1129, IBM1130, IBM1132, IBM1133, IBM1137, IBM1140, IBM1141, IBM1142, IBM1143, IBM1144, IBM1145, IBM1146, IBM1147, IBM1148, IBM1149, IBM1153, IBM1154, IBM1155, IBM1156, IBM1157, IBM1158, IBM1160, IBM1161, IBM1162, IBM1163, IBM1164, IBM1166, IBM1167, IBM1364, IBM1371, IBM1388, IBM1390, IBM1399, IBM4517, IBM4899, IBM4909, IBM4971, IBM5347, IBM9030, IBM9066, IBM9448, IBM12712, IBM16804, IEC_P27-1, IEC_P271, INIS-8, INIS-CYRILLIC, INIS, INIS8, INISCYRILLIC, ISIRI-3342, ISIRI3342, ISO-2022-CN-EXT, ISO-2022-CN, ISO-2022-JP-2, ISO-2022-JP-3, ISO-2022-JP, ISO-2022-KR, ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-9E, ISO-8859-10, ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16, ISO-10646, ISO-10646/UCS2, ISO-10646/UCS4, ISO-10646/UTF-8, ISO-10646/UTF8, ISO-CELTIC, ISO-IR-4, ISO-IR-6, ISO-IR-8-1, ISO-IR-9-1, ISO-IR-10, ISO-IR-11, ISO-IR-14, ISO-IR-15, ISO-IR-16, ISO-IR-17, ISO-IR-18, ISO-IR-19, ISO-IR-21, ISO-IR-25, ISO-IR-27, ISO-IR-37, ISO-IR-49, ISO-IR-50, ISO-IR-51, ISO-IR-54, ISO-IR-55, ISO-IR-57, ISO-IR-60, ISO-IR-61, ISO-IR-69, ISO-IR-84, ISO-IR-85, ISO-IR-86, ISO-IR-88, ISO-IR-89, ISO-IR-90, ISO-IR-92, ISO-IR-98, ISO-IR-99, ISO-IR-100, ISO-IR-101, ISO-IR-103, ISO-IR-109, ISO-IR-110, ISO-IR-111, ISO-IR-121, ISO-IR-122, ISO-IR-126, ISO-IR-127, ISO-IR-138, ISO-IR-139, ISO-IR-141, ISO-IR-143, ISO-IR-144, ISO-IR-148, ISO-IR-150, ISO-IR-151, ISO-IR-153, ISO-IR-155, ISO-IR-156, ISO-IR-157, ISO-IR-166, ISO-IR-179, ISO-IR-193, ISO-IR-197, ISO-IR-199, ISO-IR-203, ISO-IR-209, ISO-IR-226, ISO/TR_11548-1, ISO646-CA, ISO646-CA2, ISO646-CN, ISO646-CU, ISO646-DE, ISO646-DK, ISO646-ES, ISO646-ES2, ISO646-FI, ISO646-FR, ISO646-FR1, ISO646-GB, ISO646-HU, ISO646-IT, ISO646-JP-OCR-B, ISO646-JP, ISO646-KR, ISO646-NO, ISO646-NO2, ISO646-PT, ISO646-PT2, ISO646-SE, ISO646-SE2, ISO646-US, ISO646-YU, ISO2022CN, ISO2022CNEXT, ISO2022JP, ISO2022JP2, ISO2022KR, ISO6937, ISO8859-1, ISO8859-2, ISO8859-3, ISO8859-4, ISO8859-5, ISO8859-6, ISO8859-7, ISO8859-8, ISO8859-9, ISO8859-9E, ISO8859-10, ISO8859-11, ISO8859-13, ISO8859-14, ISO8859-15, ISO8859-16, ISO11548-1, ISO88591, ISO88592, ISO88593, ISO88594, ISO88595, ISO88596, ISO88597, ISO88598, ISO88599, ISO88599E, ISO885910, ISO885911, ISO885913, ISO885914, ISO885915, ISO885916, ISO_646.IRV:1991, ISO_2033-1983, ISO_2033, ISO_5427-EXT, ISO_5427, ISO_5427:1981, ISO_5427EXT, ISO_5428, ISO_5428:1980, ISO_6937-2, ISO_6937-2:1983, ISO_6937, ISO_6937:1992, ISO_8859-1, ISO_8859-1:1987, ISO_8859-2, ISO_8859-2:1987, ISO_8859-3, ISO_8859-3:1988, ISO_8859-4, ISO_8859-4:1988, ISO_8859-5, ISO_8859-5:1988, ISO_8859-6, ISO_8859-6:1987, ISO_8859-7, ISO_8859-7:1987, ISO_8859-7:2003, ISO_8859-8, ISO_8859-8:1988, ISO_8859-9, ISO_8859-9:1989, ISO_8859-9E, ISO_8859-10, ISO_8859-10:1992, ISO_8859-14, ISO_8859-14:1998, ISO_8859-15, ISO_8859-15:1998, ISO_8859-16, ISO_8859-16:2001, ISO_9036, ISO_10367-BOX, ISO_10367BOX, ISO_11548-1, ISO_69372, IT, JIS_C6220-1969-RO, JIS_C6229-1984-B, JIS_C62201969RO, JIS_C62291984B, JOHAB, JP-OCR-B, JP, JS, JUS_I.B1.002, KOI-7, KOI-8, KOI8-R, KOI8-RU, KOI8-T, KOI8-U, KOI8, KOI8R, KOI8U, KSC5636, L1, L2, L3, L4, L5, L6, L7, L8, L10, LATIN-9, LATIN-GREEK-1, LATIN-GREEK, LATIN1, LATIN2, LATIN3, LATIN4, LATIN5, LATIN6, LATIN7, LATIN8, LATIN10, LATINGREEK, LATINGREEK1, MAC-CENTRALEUROPE, MAC-CYRILLIC, MAC-IS, MAC-SAMI, MAC-UK, MAC, MACCYRILLIC, MACINTOSH, MACIS, MACUK, MACUKRAINIAN, MIK, MS-ANSI, MS-ARAB, MS-CYRL, MS-EE, MS-GREEK, MS-HEBR, MS-MAC-CYRILLIC, MS-TURK, MS932, MS936, MSCP949, MSCP1361, MSMACCYRILLIC, MSZ_7795.3, MS_KANJI, NAPLPS, NATS-DANO, NATS-SEFI, NATSDANO, NATSSEFI, NC_NC0010, NC_NC00-10, NC_NC00-10:81, NF_Z_62-010, NF_Z_62-010_(1973), NF_Z_62-010_1973, NF_Z_62010, NF_Z_62010_1973, NO, NO2, NS_4551-1, NS_4551-2, NS_45511, NS_45512, OS2LATIN1, OSF00010001, OSF00010002, OSF00010003, OSF00010004, OSF00010005, OSF00010006, OSF00010007, OSF00010008, OSF00010009, OSF0001000A, OSF00010020, OSF00010100, OSF00010101, OSF00010102, OSF00010104, OSF00010105, OSF00010106, OSF00030010, OSF0004000A, OSF0005000A, OSF05010001, OSF100201A4, OSF100201A8, OSF100201B5, OSF100201F4, OSF100203B5, OSF1002011C, OSF1002011D, OSF1002035D, OSF1002035E, OSF1002035F, OSF1002036B, OSF1002037B, OSF10010001, OSF10010004, OSF10010006, OSF10020025, OSF10020111, OSF10020115, OSF10020116, OSF10020118, OSF10020122, OSF10020129, OSF10020352, OSF10020354, OSF10020357, OSF10020359, OSF10020360, OSF10020364, OSF10020365, OSF10020366, OSF10020367, OSF10020370, OSF10020387, OSF10020388, OSF10020396, OSF10020402, OSF10020417, PT, PT2, PT154, R8, R9, RK1048, ROMAN8, ROMAN9, RUSCII, SE, SE2, SEN_850200_B, SEN_850200_C, SHIFT-JIS, SHIFT_JIS, SHIFT_JISX0213, SJIS-OPEN, SJIS-WIN, SJIS, SS636127, STRK1048-2002, ST_SEV_358-88, T.61-8BIT, T.61, T.618BIT, TCVN-5712, TCVN, TCVN5712-1, TCVN5712-1:1993, THAI8, TIS-620, TIS620-0, TIS620.2529-1, TIS620.2533-0, TIS620, TS-5881, TSCII, TURKISH8, UCS-2, UCS-2BE, UCS-2LE, UCS-4, UCS-4BE, UCS-4LE, UCS2, UCS4, UHC, UJIS, UK, UNICODE, UNICODEBIG, UNICODELITTLE, US-ASCII, US, UTF-7, UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE, UTF7, UTF8, UTF16, UTF16BE, UTF16LE, UTF32, UTF32BE, UTF32LE, VISCII, WCHAR_T, WIN-SAMI-2, WINBALTRIM, WINDOWS-31J, WINDOWS-874, WINDOWS-936, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252, WINDOWS-1253, WINDOWS-1254, WINDOWS-1255, WINDOWS-1256, WINDOWS-1257, WINDOWS-1258, WINSAMI2, WS2, YU
</pre>
<p>El primer parámetro, <strong><em>finput-charset</em></strong>, es el set de caracteres utilizado para <strong>leer</strong> los archivos de código fuente&#8230; El segundo, fexec-charset</em></strong>, es el utilizado para guardar las strings y constantes de caracter <strong>en el archivo ejecutable</strong>, así se verán correctamente al ejecutarse&#8230;</p>
<p>Así que, asumiendo que estás escribiendo tus archivos fuente en <strong><em><a href="http://en.wikipedia.org/wiki/ISO/IEC_8859-1">iso-8859-1</a></em></strong> (el set de caracteres más común en las plataformas Windows, aunque ahora se está migrando a UTF-8 y Unicode) y querés mostrarlos al ejecutar el programa en <strong><em><a href="http://en.wikipedia.org/wiki/Code_page_437">cp437</a></strong></em> (el set de caracteres de la consola de DOS), podríamos llamar al compilador del siguiente modo:</p>

<pre class="console">
g++ TestChars.cpp -o TestChars.exe -finput-charset=iso-8859-1 -fexec-charset=cp437
</pre>
<p>Y qué esperamos obtener? <img src="http://www.neoegm.com/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>

<pre class="console">
Por favor ingrese su contraseña: contraseña

Su contraseña es inválida, por favor verifíquela e inténtelo nuevamente. Ha ingresado: 'contraseña'.
</pre>
<p>Todo funcionó tal como esperábamos! <img src="http://www.neoegm.com/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Ahora, finalmente, voy a mostrar cómo configurar estas opciones de línea de comandos para el entorno de desarrollo (IDE) wxDev&#8230;</p>
<p>Antes que nada, debo decir que hay dos formas de configurar las opciones del compilador: opciones globales y opciones de proyecto&#8230; Como podrás imaginar, las primeras son aplicadas a cada proyecto compilado, mientras que las segundas sólo son aplicadas al proyecto actual (y son configuradas en cada proyecto)&#8230;</p>
<p>Para establecer los parámetros en las opciones globales del compilador, hay que ir al menú Herramientas y luego abrir el item &#8220;Opciones del Compilador&#8221;&#8230;</p>
<p><img src="http://www.neoegm.com/wp-content/uploads/2009/08/Main_Menu_ES.png" alt="Main_Menu_ES" title="Main_Menu_ES" width="208" height="225" class="aligncenter size-full wp-image-1007" /></p>
<p>Luego, simplemente ingresás el siguiente texto (los parámetros) en el recuadro: &#8220;Añadir los siguientes comandos cuando llama al compilador&#8221;:</p>
<pre class="brush: plain; light: true; title: ; notranslate">
-finput-charset=iso-8859-1 -fexec-charset=cp437
</pre>
<p>Si hay otros parámetros ya configurados, es recomendable pegarlo luego de ellos&#8230;</p>
<p><img src="http://www.neoegm.com/wp-content/uploads/2009/08/Main_Compiler_Options_Filled_ES.png" alt="Main_Compiler_Options_Filled_ES" title="Main_Compiler_Options_Filled_ES" width="479" height="505" class="aligncenter size-full wp-image-1005" /></p>
<p>Todos los parámetros van a ser enviados tanto al compilador de C como al de C++&#8230;</p>
<p>La otra alternativa es especificar los mismos parámetros en las opciones de proyecto&#8230;</p>
<p>Primero, abrimos las opciones de proyecto&#8230; O bien, yendo a Proyecto->Opciones de Proyecto, o haciendo click derecho sobre el proyecto y yendo a &#8220;Opciones de Proyecto&#8221;&#8230;</p>
<p><img src="http://www.neoegm.com/wp-content/uploads/2009/08/Project_Menu_ES.png" alt="Project_Menu_ES" title="Project_Menu_ES" width="290" height="230" class="aligncenter size-full wp-image-1001" /></p>
<p>Luego, vamos a la hoja de Parámetros y pegamos el texto anterior en los dos recuadros de compilador&#8230; Ambos parámetros pueden ser ingresados tanto en una misma línea como en líneas separadas&#8230; Tal como antes, si ya había otros parámetros configurados, es recomendable agregarlos luego de ellos&#8230;</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/08/Project_Options_Parameters_Filled_ES.png" rel="lightbox[1000]"><img src="http://www.neoegm.com/wp-content/uploads/2009/08/Project_Options_Parameters_Filled_ES-300x222.png" alt="Project_Options_Parameters_Filled_ES" title="Project_Options_Parameters_Filled_ES" width="300" height="222" class="aligncenter size-medium wp-image-1003" /></a></p>
<p>Bueno, eso es todo&#8230; La mayoría de los IDEs tienen opciones similares!<br />
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="Programming|NeoEGM com">Programming|NeoEGM com</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="graficos del diapason de la guitarra">graficos del diapason de la guitarra</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="mail czset cn loc:ES">mail czset cn loc:ES</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="mail gpl com cn loc:ES">mail gpl com cn loc:ES</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="mail gino com cn loc:ES">mail gino com cn loc:ES</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="wxDev|NeoEGM com">wxDev|NeoEGM com</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="mail ecma-music com loc:ES">mail ecma-music com loc:ES</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="mail sami com cn loc:ES">mail sami com cn loc:ES</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="where r the notes on a quitar">where r the notes on a quitar</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="email ecma-music com loc:ES">email ecma-music com loc:ES</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Clase Lista simple para C++">Clase Lista simple para C++ </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/es/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clase Lista simple para C++</title>
		<link>http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/</link>
		<comments>http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 20:55:36 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Include]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[List]]></category>
		<category><![CDATA[Memory Leaks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=976</guid>
		<description><![CDATA[Tal como publiqué hace algunos días la Clase String Simple para C++ como un ejercicio de aprendizaje de C++, ahora estoy liberando una Clase Lista simple para C++. La librería standard tiene una clase list. Pero, mientras se está aprendiendo, es una buena idea saber cómo poder desarrollar tu propia clase list. Esa es la [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++">cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Tal como publiqué hace algunos días la <a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/">Clase String Simple para C++</a> como un ejercicio de aprendizaje de C++, ahora estoy liberando una <strong>Clase Lista simple para C++</strong>.</p>
<p>La librería standard tiene una clase <em>list</em>. Pero, mientras se está aprendiendo, es una buena idea saber cómo poder desarrollar tu propia clase <em>list</em>.</p>
<p>Esa es la razón por la que hice la clase <em>List</em>. No está pensada para proyectos profesionales (para ellos, deberías utilizar la <em>list</em> de la librería standard), sino como una ayuda para aprender C++.</p>
<pre class="brush: cpp; title: ; notranslate">
template &lt;class TYPE&gt;
class List
{
	/* ... */

public:
	//Construction and destruction
	List() { /* ... */ }
	~List() { /* ... */ }
	
	List(const List&amp; rlList) { /* ... */ }
	
	//Assignment operator
	List&amp; operator=(const List&amp; rlList);

	//Information
	int Length() { /* ... */ }
	bool Empty() { /* ... */ }

	//Element managing
	int Add(TYPE&amp; rtData);
	TYPE* Elem(int nPos);
	bool Delete(int nPos);
	void DeleteAll();
	
	//Search
	int Find(TYPE&amp; rItem, int nStartAt = 0);

	//Operadores
	TYPE&amp; operator[](int nPos) { /* ... */ }	//Elem
	int operator&lt;&lt;(TYPE&amp; rdData) { /* ... */ }	//Add

protected:
	void FreeList();
	void Init() { /* ... */ }
};

//Output
template &lt;class TYPE&gt;
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; oStream, List&lt;TYPE&gt;&amp; rlList);
</pre>
<p><span id="more-976"></span></p>
<p>Este es un proyecto de ejemplo hecho para explicar la utilización de la clase <em>List</em>.</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
	using std::cout;
	using std::cin;
	using std::endl;

#include &quot;List.h&quot;
#include &quot;String.h&quot;

int main(int argc, char *argv[])
{
	cout &lt;&lt; &quot;List sample project&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;-------------------&quot; &lt;&lt; endl &lt;&lt; endl;


	//-----------------------------
	cout &lt;&lt; &quot;&gt; Creating a list of strings... An empty string finishes the list...&quot; &lt;&lt; endl &lt;&lt; endl;

	List&lt;String&gt; lStrings;
	String sTmp;
	
	do
	{
		cout &lt;&lt; &quot;&gt; String &quot; &lt;&lt; lStrings.Length()+1 &lt;&lt; &quot;: &quot;;
		cin &gt;&gt; sTmp;
		
		if (sTmp.Length())
			lStrings.Add(sTmp);
	} while (sTmp.Length());
	
	cout &lt;&lt; endl &lt;&lt; &quot;&gt; Entry finished. &quot; &lt;&lt; lStrings.Length() &lt;&lt; &quot; string(s) loaded.&quot; &lt;&lt; endl &lt;&lt; endl;
	
	cout &lt;&lt; &quot;&gt; Printing list...&quot; &lt;&lt; endl &lt;&lt; endl;
	
	cout &lt;&lt; lStrings;

	cout &lt;&lt; endl;
	//-----------------------------
	
	
	//-----------------------------
	do
	{
		cout &lt;&lt; &quot;&gt; Type a string to find in the list (exact match) [empty = end]: &quot;;
		cin &gt;&gt; sTmp;

		if (sTmp.Length())
		{
			int nFound = lStrings.Find(sTmp);
			
			if (nFound != -1)
			{
				lStrings.Delete(nFound);

				cout &lt;&lt; &quot;&gt; String \&quot;&quot; &lt;&lt; sTmp &lt;&lt; &quot;\&quot; found at position &quot; &lt;&lt; nFound+1 &lt;&lt; &quot; and removed.&quot; &lt;&lt; endl &lt;&lt; endl;
				
				cout &lt;&lt; &quot;&gt; Printing list...&quot; &lt;&lt; endl &lt;&lt; endl;

				if (!lStrings.Empty())
					cout &lt;&lt; lStrings;
				else
				{
					cout &lt;&lt; &quot;[Empty list]&quot; &lt;&lt; endl &lt;&lt; endl;
					break;
				}
			}
			else
				cout &lt;&lt; &quot;&gt; String \&quot;&quot; &lt;&lt; sTmp &lt;&lt; &quot;\&quot; not found.&quot; &lt;&lt; endl;
		}
		
		cout &lt;&lt; endl;
	} while (sTmp.Length());
	
	cout &lt;&lt; endl;
	//-----------------------------

	//-----------------------------
	cout &lt;&lt; &quot;&gt; Now getting a bit more complex... Let's create a list of lists of strings... An empty string finishes the list and an empty first string finishes the list of lists...&quot; &lt;&lt; endl &lt;&lt; endl;

	List&lt; List&lt;String&gt; &gt; lLists;
	List&lt;String&gt; lTmpList;
	int nStrings = 0;

	do
	{
		lTmpList.DeleteAll();
		
		cout &lt;&lt; &quot;&gt; Loading list &quot; &lt;&lt; lLists.Length()+1 &lt;&lt; &quot;...&quot; &lt;&lt; endl;
		
		do
		{
			cout &lt;&lt; &quot;\t&gt; String &quot; &lt;&lt; lTmpList.Length()+1 &lt;&lt; &quot;: &quot;;
			cin &gt;&gt; sTmp;
			
			if (sTmp.Length())
			{
				lTmpList.Add(sTmp);
				nStrings++;
			}
		} while (sTmp.Length());
		
		if (lTmpList.Length())
			lLists.Add(lTmpList);
	} while (lTmpList.Length());
	
	cout &lt;&lt; endl &lt;&lt; &quot;&gt; Entry finished. &quot; &lt;&lt; lLists.Length() &lt;&lt; &quot; list(s) loaded, &quot; &lt;&lt; nStrings &lt;&lt; &quot; string(s) loaded.&quot; &lt;&lt; endl &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;&gt; Printing lists (standard method)...&quot; &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; lLists;

	cout &lt;&lt; endl;
	
	cout &lt;&lt; &quot;&gt; Printing lists (custom method)...&quot; &lt;&lt; endl &lt;&lt; endl;
	
	for (int i = 0; i &lt; lLists.Length(); i++)
	{
		List&lt;String&gt; *plList = lLists.Elem(i);

		if (plList)
		{
			cout &lt;&lt; &quot;- List &quot; &lt;&lt; i &lt;&lt; endl &lt;&lt; endl;
			cout &lt;&lt; *plList;
			cout &lt;&lt; endl;
		}
	}
	//-----------------------------

    return 0;
}
</pre>
<p>Y esta su salida:</p>

<pre class="console">
List sample project
-------------------

> Creating a list of strings... An empty string finishes the list...

> String 1: Test 1
> String 2: Test 2
> String 3: Test 3, a little bit longer
> String 4:

> Entry finished. 3 string(s) loaded.

> Printing list...

Test 1
Test 2
Test 3, a little bit longer

> Type a string to find in the list (exact match) [empty = end]: Hello
> String "Hello" not found.

> Type a string to find in the list (exact match) [empty = end]: Test 1
> String "Test 1" found at position 1 and removed.

> Printing list...

Test 2
Test 3, a little bit longer

> Type a string to find in the list (exact match) [empty = end]: Test 1
> String "Test 1" not found.

> Type a string to find in the list (exact match) [empty = end]: test 2
> String "test 2" not found.

> Type a string to find in the list (exact match) [empty = end]: Test 2
> String "Test 2" found at position 1 and removed.

> Printing list...

Test 3, a little bit longer

> Type a string to find in the list (exact match) [empty = end]: Test 3, a little bit longer
> String "Test 3, a little bit longer" found at position 1 and removed.

> Printing list...

[Empty list]


> Now getting a bit more complex... Let's create a list of lists of strings... An empty string finishes the list and an empty first string finishes the list of lists...

> Loading list 1...
        > String 1: Test 1a
        > String 2: Test 1b
        > String 3: Test 1c
        > String 4:
> Loading list 2...
        > String 1: Test 2a
        > String 2: Test 2b
        > String 3: Test 2c
        > String 4: Test 2d
        > String 5:
> Loading list 3...
        > String 1: Test 3a
        > String 2: Test 3b
        > String 3: This is a looooooooooooooooooooooong string
        > String 4:
> Loading list 4...
        > String 1:

> Entry finished. 3 list(s) loaded, 10 string(s) loaded.


> Printing lists (standard method)...

Test 1a
Test 1b
Test 1c

Test 2a
Test 2b
Test 2c
Test 2d

Test 3a
Test 3b
This is a looooooooooooooooooooooong string


> Printing lists (custom method)...

- List 0

Test 1a
Test 1b
Test 1c

- List 1

Test 2a
Test 2b
Test 2c
Test 2d

- List 2

Test 3a
Test 3b
This is a looooooooooooooooooooooong string

</pre>
<p>Este proyecto también utiliza la <a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/">Clase String simple para C++</a> para mostrar a la clase List trabajando con clases personales. El mismo código podría utilizarse perfectamente reemplazando &#8220;String&#8221; por &#8220;string&#8221; e incluyendo los headers de la versión standard de <em>string</em>.</p>
<p>El código es completamente portable.</p>
<p>Ha sido desarrollado, compilado y testeado utilizando <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> para Windows con el <a href="http://www.mingw.org/">compilador MinGW</a> (incluído en el paquete). En Linux, fue compilado utilizando el compilador GNU GCC.</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">String está liberado bajo la licencia <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<p><br/><br />
También probé el proyecto para verificar la ausencia de fugas de memoria utilizando el <a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/">cppMemDbg – Librería fácil de usar de detección de fugas de memoria para C++</a> y no encontró ningún tipo de problema&#8230;</p>
<p>Podés descargar la salida de la librería y el proyecto adaptado para cppMemDbg aquí:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_Sample_Project_cppMemDbg_Output.txt">Descargar salida de cppMemDbg</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_Sample_Project_1.0_cppMemDbg.zip">Descargar Proyecto Adaptado 1.0</a></p>
</div>
<p><br/><br />
Ahora, finalmente, los links de descarga:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_1.0.zip">Descargar Clase List 1.0</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_Sample_Project_1.0.zip">Descargar Proyecto de Ejemplo 1.0</a></p>
</div>
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="c list class">c list class</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="list class c">list class c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="class list c">class list c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="lista simple c">lista simple c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="clase lista c">clase lista c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="LISTA SIMPLE EN C">LISTA SIMPLE EN C</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="listas simples en c">listas simples en c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="clase lista en c">clase lista en c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="c class list">c class list</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="list class in c">list class in c</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++">cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clase String simple para C++</title>
		<link>http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/</link>
		<comments>http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 14:12:15 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Include]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[Strings]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=764</guid>
		<description><![CDATA[Todo programador de C++ sabe que la librería standard tiene una clase string. Pero, mientras se está aprendiendo, es una buena idea saber cómo poder desarrollar tu propia clase string. Esa es la razón por la que hice la clase String. No está pensada para proyectos profesionales (para ellos, deberías utilizar la string de la [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Clase Lista simple para C++">Clase Lista simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++">cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++ </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Todo programador de C++ sabe que la librería standard tiene una clase <em>string</em>. Pero, mientras se está aprendiendo, es una buena idea saber cómo poder desarrollar tu propia clase <em>string</em>.</p>
<p>Esa es la razón por la que hice la clase <em>String</em>. No está pensada para proyectos profesionales (para ellos, deberías utilizar la <em>string</em> de la librería standard), sino como una ayuda para aprender C++.</p>
<pre class="brush: cpp; title: ; notranslate">
class String
{
	char *m_pszString;	//Allocated buffer
	int m_nAllocated;	//Allocated length

public:
	//Construction and destruction
	String() { /* ... */ }
	~String() { /* ... */ }

	//Copy constructors
	String(const char *pszString) { /* ... */ }
	String(const String&amp; rsString) { /* ... */ }

	//Operators (assignment)
	String&amp; operator=(const char *pszString);
	String&amp; operator=(const String&amp; rsString) { /* ... */ }

	//Operators (concatenation)
	String&amp; operator+=(const char *pszString);
	String&amp; operator+=(String&amp; rsString) { /* ... */ }
	String operator+(String rsString);

	//Operators (comparison)
	bool operator&lt;(String sString) { /* ... */ }
	bool operator&lt;=(String sString) { /* ... */ }

	bool operator&gt;(String sString) { /* ... */ }
	bool operator&gt;=(String sString) { /* ... */ }

	bool operator==(String sString) { /* ... */ }
	bool operator!=(String sString) { /* ... */ }

	//Operations
	void Clear();
	String Lower() { /* ... */ }
	String Upper() { /* ... */ }

	//Information
	int Length() { /* ... */ }

	//Cast operators
	operator const char*() { /* ... */ }

protected:	//Helper functions
	/* ... */
};

//Output e input
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; oStream, String&amp; rsString);
std::istream&amp; operator&gt;&gt;(std::istream&amp; iStream, String&amp; rsString);
</pre>
<p><span id="more-764"></span></p>
<p>Este es un proyecto de ejemplo hecho para explicar la utilización de la clase <em>String</em>.</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
	using std::cout;
	using std::cin;
	using std::endl;
#include &quot;String.h&quot;

using namespace std;

int main(int argc, char *argv[])
{
	cout &lt;&lt; &quot;String sample project&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;---------------------&quot; &lt;&lt; endl &lt;&lt; endl;

	String a(&quot;This&quot;), b(&quot;is&quot;), c(&quot;a&quot;), d(&quot;test&quot;);
	String e = a + &quot; &quot; + b + &quot; &quot; + c + &quot; &quot; + d;

	cout &lt;&lt; &quot;String parts:&quot; &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; a &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; b &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; c &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; d &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;Concatenated with spaces:&quot; &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; e &lt;&lt; endl &lt;&lt; endl;

	String f, g;

	cout &lt;&lt; &quot;Please input a string (empty to break): &quot;;
	cin &gt;&gt; f;
	cout &lt;&lt; &quot;Please input other string (empty to break): &quot;;
	cin &gt;&gt; g;

	cout &lt;&lt; endl;

	cout &lt;&lt; &quot;1st string (&quot; &lt;&lt; f &lt;&lt; &quot;) is &quot; &lt;&lt; f.Length() &lt;&lt; &quot; chars long.&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;2nd string (&quot; &lt;&lt; g &lt;&lt; &quot;) is &quot; &lt;&lt; g.Length() &lt;&lt; &quot; chars long.&quot; &lt;&lt; endl;

	cout &lt;&lt; endl;

	cout &lt;&lt; &quot;1st string in lowercase is &quot; &lt;&lt; f.Lower() &lt;&lt; endl;
	cout &lt;&lt; &quot;1st string in uppercase is &quot; &lt;&lt; f.Upper() &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;2nd string in lowercase is &quot; &lt;&lt; g.Lower() &lt;&lt; endl;
	cout &lt;&lt; &quot;2nd string in uppercase is &quot; &lt;&lt; g.Upper() &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;1 &lt; 2\t=&gt; &quot; &lt;&lt; (f&lt;g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 &lt;= 2\t=&gt; &quot; &lt;&lt; (f&lt;=g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 &gt; 2\t=&gt; &quot; &lt;&lt; (f&gt;g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 &gt;= 2\t=&gt; &quot; &lt;&lt; (f&gt;=g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 == 2\t=&gt; &quot; &lt;&lt; (f==g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 != 2\t=&gt; &quot; &lt;&lt; (f!=g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl &lt;&lt; endl;

	if (f == g)
		cout &lt;&lt; &quot;Strings are equal.&quot; &lt;&lt; endl;
	else
		cout &lt;&lt; &quot;Strings are not equal.&quot; &lt;&lt; endl;

	cout &lt;&lt; endl;

	cout &lt;&lt; &quot;1+2\t=&gt; &quot; &lt;&lt; f+g &lt;&lt; endl;
	cout &lt;&lt; &quot;2+1\t=&gt; &quot; &lt;&lt; g+f &lt;&lt; endl;

	cout &lt;&lt; endl;

    return 0;
}
</pre>
<p>Y esta su salida:</p>

<pre class="console">
String sample project
---------------------

String parts:
        This
        is
        a
        test

Concatenated with spaces:
        This is a test

Please input a string (empty to break): Hello, string 1
Please input other string (empty to break): Phrase 2

1st string (Hello, string 1) is 15 chars long.
2nd string (Phrase 2) is 8 chars long.

1st string in lowercase is hello, string 1
1st string in uppercase is HELLO, STRING 1

2nd string in lowercase is phrase 2
2nd string in uppercase is PHRASE 2

1 < 2   => false
1 <= 2  => false
1 > 2   => true
1 >= 2  => true
1 == 2  => false
1 != 2  => true

Strings are not equal.

1+2     => Hello, string 1Phrase 2
2+1     => Phrase 2Hello, string 1

</pre>
<p>El código es completamente portable.</p>
<p>Ha sido desarrollado, compilado y testeado utilizando <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> para Windows con el <a href="http://www.mingw.org/">compilador MinGW</a> (incluído en el paquete). En Linux, fue compilado utilizando el compilador GNU GCC.</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">String está liberado bajo la licencia <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<p>Ahora los links de descarga:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/string-class/String_1.0.zip">Descargar Clase String 1.0</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/string-class/String_Sample_Project_1.0.zip">Descargar Proyecto de Ejemplo 1.0</a></p>
</div>
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" title="open source c string class">open source c string class</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" title="clase string c">clase string c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" title="C String Class Source Code">C String Class Source Code</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" title="string c español">string c español</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" title="simple string class c">simple string class c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" title="simple string class">simple string class</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" title="mail istream al loc:ES">mail istream al loc:ES</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" title="string c">string c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" title="simple c string class">simple c string class</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" title="c string class source">c string class source</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Clase Lista simple para C++">Clase Lista simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++">cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++ </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++</title>
		<link>http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/</link>
		<comments>http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 11:51:13 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Include]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Memory Leaks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=727</guid>
		<description><![CDATA[Esta librería es la secuela para C++ de cMemDbg. Tal como cMemDbg, es una librería muy fácil de usar que sirve para ayudar a detectar y trazar fugas de memoria (memory leaks). Su utilización es muy similar a la cMemDbg, pero con soporte para los operadores de C++ (new, new[], delete and delete[]). Hay muchas [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" rel="bookmark" title="cMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C">cMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Clase Lista simple para C++">Clase Lista simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Esta librería es la secuela para C++ de <a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/">cMemDbg</a>.</p>
<p>Tal como cMemDbg, es una librería muy fácil de usar que sirve para ayudar a detectar y trazar fugas de memoria (memory leaks).</p>
<p>Su utilización es muy similar a la cMemDbg, pero con soporte para los operadores de C++ (new, new[], delete and delete[]).</p>
<p>Hay muchas soluciones para esto en la red, pero esta tiene la particularidad de ser realmente simple de implementar.</p>

<pre class="console">>new  003D26D8  36  [Main.cpp:127]
>new  003D2708  36  [Main.cpp:128]
>ERROR  Bad free type  free => delete  003D2708  36
(Main.cpp:128)
>free  003D2708  36  (Main.cpp:128)  [Main.cpp:129]
>free  003D2708  0    [Main.cpp:130]
>ERROR  Trying to free unallocated memory: 003D2708
[Main.cpp:130]
>delete[]  003D3EB0  7  (String.cpp:59)  [String.h:41]
[...]
>delete[]  003D24F0  4  (String.cpp:59)  [String.h:41]
>delete  003D2490  40  (Lista.h:120)  [Lista.h:112]
>INFO  PROBLEM: Memory leak found (36 bytes)
>INFO  Unfreed block  003D26D8  36    [Main.cpp:127]
</pre>
<p><span id="more-727"></span>Simplemente hay que agregar el siguiente include al archivo principal de inclusión (un archivo que sea incluido por cada archivo del proyecto) o, en el caso de que no haya uno, a cada archivo que llame a una función de alocación de memoria (malloc, realloc, calloc, free, new, new[], delete or delete[]).</p>
<p>Esta es la línea:</p>
<pre class="brush: cpp; light: true; title: ; notranslate">#include &quot;cMemDbg.h&quot;</pre>
<p>Hay dos precauciones extra a tener en cuenta:<br />
1- Incluirlo <strong>después</strong> de los headers standard (stdio.h, stdlib.h, malloc.h, etc.).<br />
2- Nunca llamar al aperador delete (o delete[]) sin saber si su argumento es NULL. Así que &#8220;delete a;&#8221; debería pasar a ser &#8220;if (a) delete a;&#8221;. De otro modo, la librería puede mostrar mensajes incorrectos.</p>
<p>Eso es todo&#8230; Esperabas más? Bueno, hay un último paso&#8230; Tenés que hacer esta llamada justo antes de salir del programa para poder obtener las conclusiones detalladas:</p>
<pre class="brush: cpp; light: true; title: ; notranslate">PrintMemoryLeakInfo();</pre>
<p>Por defecto, la salida de la librería irá a stdout (normalmente la pantalla de la consola). Si querés redirigira a un archivo, podés llamar a la función InitCPPMemDbg(). Este es su prototipo:</p>
<pre class="brush: cpp; light: true; title: ; notranslate">void InitCPPMemDbg(const char *pszOutputPath = NULL);</pre>
<p>Otra opción, para simplificar, es crear un objeto global del tipo &#8220;cppMemDbg&#8221; al comienzo de las declaraciones globales. Podés pasarle una ruta de archivo al constructor para redirigir la salida. Este objeto se va a encargar de llamar automáticamente a InitCPPMemDbg  (para configurar la redirección) al construirse y a PrintMemoryLeakInfo al destruirse.</p>
<p>Así de simple:</p>
<pre class="brush: cpp; light: true; title: ; notranslate">cppMemDbg cDbg;</pre>
<p>O, con redirección:</p>
<pre class="brush: cpp; light: true; title: ; notranslate">cppMemDbg cDbg(&quot;mylocalfile.txt&quot;);</pre>
<p>Easy, not?</p>
<p>That was all&#8230; Really.</p>
<p>Fácil, no?</p>
<p>Eso fue todo&#8230; En serio.</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">cppMemDbg está liberado bajo la licencia <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<p>Ahora, antes de ir a funcionalidades más &#8220;de experto&#8221;, voy a dejar el link para descargar la librería para aquellos que no quieran seguir leyendo:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/cppmemdbg/cppMemDbg_1.0.zip">Download</a></p>
</div>
<p>Ahora continuemos&#8230;</p>
<p>Esta librería viene con tres parámetros configurables (disponibles en cppMemDbg.cpp):</p>
<ul>
<li><strong>PRINT_OPERATIONS:</strong> Si está seteado en 1, se va a imprimir a la salida configurada (stdout por default) cada operación de alocación de memoria realizada en el programa (alocación o liberación). De otro modo, la librería sólo imprimirá problemas, notificaciones y el dump final. <em>[Valor predeterminado = 1]</em></li>
<li><strong>MAX_ALLOC:</strong> Largo del stack interno de memoria de la librería (en elementos). Es la máxima cantidad de alocaciones que pueden ser trazadas sin ser liberadas. Se puede incementar este valor a voluntad en casi de ser necesario. De hecho, si es necesario, la librería imprimirá un mensaje diciendo: &#8220;INTERNAL_ERROR: Allocation stack overflow, please increase MAX_ALLOC&#8221;. <em>[Valor predeterminado = 256]</em></li>
<li><strong>g_fFile:</strong> FILE* al cuál escribirle todas las notificaciones generadas por la librería. <em>[Valor predeterminado = stdout]</em></li>
<li><strong>MAX_DELETE_STACK:</strong> Largo del stack interno de <em>delete</em> de la librería (en elementos). Es la máxima cantidad de <em>delete</em>s que pueden anidarse. Se puede incementar este valor a voluntad en casi de ser necesario. De hecho, si es necesario, la librería imprimirá un mensaje diciendo: &#8220;INTERNAL_ERROR: Delete stack overflow, please increase MAX_DELETE_STACK&#8221;. <em>[Valor predeterminado = 16]</em></li>
</ul>
<p>Finalmente, hay dos funciones más que se pueden utilizar en caso de ser necesario:</p>
<ul>
<li><strong>PrintTotalAllocatedMemory():</strong> Imprime la cantidad acumulativa de memoria alocada al momento de la llamada.</li>
<li><strong>PrintMemoryReservedByCMemDbgLibrary():</strong> Imprime la cantidad de memoria reservada por la librería (definida en tiempo de compilación por la constante MAX_ALLOC).</li>
</ul>
<p>Eso es todo&#8230; Dije que era fácil de usar.</p>
<p>De todos modos si, luego de leer los comentarios del archivo cMemDbg.h, tenés algún tipo de pregunta, comentario o sugerencia, no dudes en contactarme.</p>
<p>Acá está el proyecto <a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/">Control de Asistencia</a> modificado para verificar la existencia de memory leaks y problemas de alocación/liberación de memoria con la librería cppMemDbg:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/cppmemdbg/ControlAsistencia_cppMemDbg.zip">Descargar proyecto de ejemplo</a></p>
</div>
<p>El código es portable entre Linux y Windows (lo testeé personalmente en ambas plataformas y funcionó idénticamente).</p>
<p>Ha sido desarrollado, compilado y testeado utilizando <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> para Windows con el <a href="http://www.mingw.org/">compilador MinGW</a> (incluído en el paquete). En Linux, fue compilado utilizando el compilador GNU GCC.</p>
<p>Está configurado para enviar la salida al archivo &#8220;TestMemDbg.txt&#8221; del directorio actual. Esta es la parte importante del archivo Main.cpp:</p>
<pre class="brush: cpp; first-line: 101; highlight: [107,109]; title: ; notranslate">
//...

#include &quot;ControlDeAsistencia.h&quot;
#include &quot;BasicFunctions.h&quot;
#include &lt;fstream&gt;

#include &quot;cppMemDbg.h&quot;

cppMemDbg cDbg(&quot;TestMemDbg.txt&quot;);

//...
</pre>
<p>Y esta es su salida satisfactoria (la salida real está tabulada para hacer más simple su análisis utilizando un software de hoja de cálculos):</p>

<pre class="console">>new[]  003D3F58  14  [String.cpp:59]
>new[]  003D2438  14  [String.cpp:59]
>delete[]  003D3F58  14  (String.cpp:59)  [String.h:41]
>new[]  003D3EB0  7  [String.cpp:59]
>new[]  003D2450  7  [String.cpp:59]
[...]
>delete[]  003D2558  4  (String.cpp:59)  [String.h:41]
>delete[]  003D24F0  4  (String.cpp:59)  [String.h:41]
>delete  003D2490  40  (Lista.h:120)  [Lista.h:112]
>INFO  No memory leaks detected
</pre>
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="cppMemDbg">cppMemDbg</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="mingw memory leak detection">mingw memory leak detection</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="memory leak detection mingw">memory leak detection mingw</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="mingw memory leak">mingw memory leak</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="c memory leak library">c memory leak library</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="c memory leak detector">c memory leak detector</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="memory leak mingw">memory leak mingw</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="c memory leak detection library">c memory leak detection library</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="memory leak detection c">memory leak detection c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="libreria para delete en c">libreria para delete en c</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" rel="bookmark" title="cMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C">cMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Clase Lista simple para C++">Clase Lista simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Control de Asistencia (Versión wxWidgets)</title>
		<link>http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/</link>
		<comments>http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 21:00:25 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[wxWidgets]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=479</guid>
		<description><![CDATA[wxControlAsistencia es una versión GUI (con interfase gráfica) de Control de Asistencia. Fue preparada como un ejercicio un poco más avanzado de introducción a la utilización de interfases gráficas (GUI) utilizando wxWidgets (el ejercicio de introducción básica fue la aplicación Celsius a Fahrenheit). Para la explicación completa del ejercicio, por favor visitar el ejercicio original [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" rel="bookmark" title="Celsius a Fahrenheit">Celsius a Fahrenheit </a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/office-document-property-resetter/" rel="bookmark" title="Office Document Property Resetter (Reseteador de propiedades de archivos de Office)">Office Document Property Resetter (Reseteador de propiedades de archivos de Office) </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>wxControlAsistencia es una versión GUI (con interfase gráfica) de <a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/">Control de Asistencia</a>.</p>
<p>Fue preparada como un ejercicio un poco más avanzado de introducción a la utilización de interfases gráficas (GUI) utilizando <a href="http://www.wxwidgets.org/">wxWidgets</a> (el ejercicio de introducción básica fue la aplicación <a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/">Celsius a Fahrenheit</a>).</p>
<p>Para la explicación completa del ejercicio, por favor visitar el <a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/">ejercicio original de Control de Asistencia</a>.</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia1.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia1-300x225.png" alt="wxControlAsistencia1" title="wxControlAsistencia1" width="300" height="225" class="aligncenter size-medium wp-image-506" /></a></p>
<p><span id="more-479"></span></p>
<p>Dado que el código del proyecto de consola fue escrito tratando de hacerlo encapsulado y portable, se reutilizaron todos los archivos posibles. Para una descripción detallada de los archivos utilizados, ver el archivo &#8220;Files.xls&#8221; en el paquete del código fuente.</p>
<p>Lo que sigue va a ser una revisión general muy similar a la original, pero con las pantallas de la Versión wxWidgets.</p>
<p>Cuando se inicia el programa, sólo se puede ingresar como administrador (-1234:prueba)&#8230;</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia2.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia2-300x225.png" alt="wxControlAsistencia2" title="wxControlAsistencia2" width="300" height="225" class="aligncenter size-medium wp-image-507" /></a></p>
<p>Luego, se llega al menú de administración:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia3.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia3-300x225.png" alt="wxControlAsistencia3" title="wxControlAsistencia3" width="300" height="225" class="aligncenter size-medium wp-image-508" /></a></p>
<p>El siguiente paso debería ser dar de alta a los diferentes usuarios utilizando la primera opción:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia4.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia4-300x225.png" alt="wxControlAsistencia4" title="wxControlAsistencia4" width="300" height="225" class="aligncenter size-medium wp-image-509" /></a></p>
<p>Luego de esto, ellos podrán ingresar por sí mismos:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia5.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia5-300x225.png" alt="wxControlAsistencia5" title="wxControlAsistencia5" width="300" height="225" class="aligncenter size-medium wp-image-510" /></a></p>
<p>Para llegar a la pantalla de asistencia y así poder registrar sus acciones:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia6.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia6-300x225.png" alt="wxControlAsistencia6" title="wxControlAsistencia6" width="300" height="225" class="aligncenter size-medium wp-image-511" /></a></p>
<p>Cada una de ellas hasta que vuelvan a sus casas&#8230;</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia7.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia7-300x225.png" alt="wxControlAsistencia7" title="wxControlAsistencia7" width="300" height="225" class="aligncenter size-medium wp-image-512" /></a></p>
<p>Cuando cualquier administrador desee observar el listado completo de usuarios y acciones, simplemente tiene que ingresar e ir al segundo botón del menú de administración.</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia8.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia8-300x225.png" alt="wxControlAsistencia8" title="wxControlAsistencia8" width="300" height="225" class="aligncenter size-medium wp-image-513" /></a></p>
<p>Es simplemente el mismo texto que aparecía en la versión de consola. Pero, ahora hay una segunda opción (tercer botón):</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia9.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia9-300x225.png" alt="wxControlAsistencia9" title="wxControlAsistencia9" width="300" height="225" class="aligncenter size-medium wp-image-514" /></a></p>
<p>Si lo desea, puede guardar esa información a un archivo utilizando, en cambio, el cuarto botón:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia10.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia10-300x225.png" alt="wxControlAsistencia10" title="wxControlAsistencia10" width="300" height="225" class="aligncenter size-medium wp-image-515" /></a></p>
<p>O el quinto:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia11.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia11-300x225.png" alt="wxControlAsistencia11" title="wxControlAsistencia11" width="300" height="225" class="aligncenter size-medium wp-image-516" /></a></p>
<p>Finalmente, puede cerrar el programa yendo al sexto botón (perdiendo todos los datos)&#8230;</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia12.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia12-300x225.png" alt="wxControlAsistencia12" title="wxControlAsistencia12" width="300" height="225" class="aligncenter size-medium wp-image-505" /></a></p>
<p>Eso es todo&#8230;</p>
<p>Ahora, como hice anteriormente, voy a dejar los links.</p>
<p>El código debería ser <strong>portable</strong>, pero sólo lo probé personalmente en Windows.</p>
<p>Ha sido desarrollado, compilado y testeado utilizando <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> para Windows con el <a href="http://www.mingw.org/">compiler MinGW</a> (incluído en el paquete).</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">wxControlAsistencia está liberado bajo la licencia <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/wx-control-asistencia/wxControlAsistencia_1.0.zip">Descargar wxControlAsistencia v1.0</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/wx-control-asistencia/wxControlAsistencia_1.0_Source.zip">Descargar Código Fuente v1.0</a></p>
</div>
<p><strong>Actualización:</strong> bug menor solucionado en String.cpp => version 1.01<br />
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="codigo fuente control de asistencia">codigo fuente control de asistencia</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="codigo fuente sistema asistencia">codigo fuente sistema asistencia</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="wxwidgets gui">wxwidgets gui</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="control de asistencias de alumnos">control de asistencias de alumnos</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="control de asistencia codigo fuente">control de asistencia codigo fuente</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="codigo fuente de control de asistencia">codigo fuente de control de asistencia</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="CODIGO FUENTE CONTROL DE PERSONAL">CODIGO FUENTE CONTROL DE PERSONAL</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="control asistencia">control asistencia</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="wxControlAsistencia">wxControlAsistencia</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="codigo fuente de control de personal">codigo fuente de control de personal</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" rel="bookmark" title="Celsius a Fahrenheit">Celsius a Fahrenheit </a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/office-document-property-resetter/" rel="bookmark" title="Office Document Property Resetter (Reseteador de propiedades de archivos de Office)">Office Document Property Resetter (Reseteador de propiedades de archivos de Office) </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Celsius a Fahrenheit</title>
		<link>http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/</link>
		<comments>http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 22:00:33 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[wxWidgets]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Celsius]]></category>
		<category><![CDATA[Convert]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Fahrenheit]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MinGW]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Temperature]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=474</guid>
		<description><![CDATA[This is a very tiny and simple application I’ve written to teach the basic usage of wxWidgets as an introduction to GUI (Graphical User Interfaces).

Its purpose is just what it’s name says: converting from celsius degrees to fahrenheit degrees (and sideways).<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/online-tools/convert-celsius-to-fahrenheit-online/" rel="bookmark" title="Convertir de Celsius a Fahrenheit Online">Convertir de Celsius a Fahrenheit Online </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" rel="bookmark" title="Control de Asistencia (Versión wxWidgets)">Control de Asistencia (Versión wxWidgets) </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Si simplemente querés convertir temperaturas utilizando un sitio web, visitá el <a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/">conversor online de celsius a fahrenheit</a>. Si no, seguí leyendo&#8230;</p>
<p>Esta es una muy pequeña y simple aplicación que desarrollé para enseñar la utilización básica de <a href="http://www.wxwidgets.org/" target="_blank">wxWidgets</a> como una introducción a las interfases gráficas (GUI).</p>
<p>Su propósito es justamente lo que el nombre dice: convertir de grados celsius a grados fahrenheit (y viceversa).</p>
<p><img src="http://www.neoegm.com/wp-content/uploads/2009/07/CelsiusAFahrenheit.png" alt="CelsiusAFahrenheit" title="CelsiusAFahrenheit" width="374" height="229" class="aligncenter size-full wp-image-481" /></p>
<p><span id="more-474"></span></p>
<p>Estas son las dos fórmulas necesarias para hacer el programa (en realidad una deriva de la otra, pero por comodidad dejo las dos):</p>
<pre class="brush: plain; light: true; title: ; notranslate">
Tcelsius = (5/9) * (Tfahrenheit - 32)
Tfahrenheit = (9/5) * Tcelsius + 32
</pre>
<p>Ha sido desarrollado, compilado y probado utilizando <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> para Windows con el <a href="http://www.mingw.org/">compilador MinGW</a> (incluído en el paquete).</p>
<p>El código debería ser <strong>portable</strong>, pero no lo probé personalmente en otras plataformas.</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">CelsiusAFahrenheit está liberado bajo la licencia <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/celsius-to-fahrenheit/CelsiusAFahrenheit_1.0.zip">Descargar CelsiusAFahrenheit v1.0</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/celsius-to-fahrenheit/CelsiusAFahrenheit_1.0_Source.zip">Descargar Código Fuente v1.0</a></p>
</div>
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir grados fahrenheit a centigrados">convertir grados fahrenheit a centigrados</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="grados celsius a farenheit">grados celsius a farenheit</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir grados farenheit a centigrados">convertir grados farenheit a centigrados</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir centigrados a farenheit">convertir centigrados a farenheit</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="grados farenheit a celsius">grados farenheit a celsius</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir celsius a farenheit">convertir celsius a farenheit</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir de fahrenheit a celsius">convertir de fahrenheit a celsius</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir grados centigrados a farenheit en java">convertir grados centigrados a farenheit en java</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir grados farenheit a celsius">convertir grados farenheit a celsius</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="como convertir grados farenheit a centigrados">como convertir grados farenheit a centigrados</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/online-tools/convert-celsius-to-fahrenheit-online/" rel="bookmark" title="Convertir de Celsius a Fahrenheit Online">Convertir de Celsius a Fahrenheit Online </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" rel="bookmark" title="Control de Asistencia (Versión wxWidgets)">Control de Asistencia (Versión wxWidgets) </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Control de Asistencia</title>
		<link>http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/</link>
		<comments>http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 21:00:42 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Attendance]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Control]]></category>
		<category><![CDATA[DOS]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=476</guid>
		<description><![CDATA[&#8220;Control de Asistencia&#8221; es una aplicación de consola hecha como un ejercicio para integrar los diferentes conceptos de C++ enseñados en clase hasta la mitad del año. El objetivo principal es ser capaz de desarrollar un control de asistencia de personal que registre los horarios (y justificaciones, si corresponde) de cada vez que los empleados [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" rel="bookmark" title="Control de Asistencia (Versión wxWidgets)">Control de Asistencia (Versión wxWidgets) </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Clase Lista simple para C++">Clase Lista simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>&#8220;Control de Asistencia&#8221; es una aplicación de consola hecha como un <strong>ejercicio</strong> para integrar los diferentes conceptos de C++ enseñados en clase hasta la mitad del año.</p>
<p>El objetivo principal es ser capaz de desarrollar un control de asistencia de personal que registre los horarios (y justificaciones, si corresponde) de cada vez que los empleados lleguen, vayan a almorzar, vuelvan del almuerzo o retornen a sus casas.</p>

<pre class="console">Sistema de control de asistencia de personal
--------------------------------------------

DNI:

</pre>
<p><span id="more-476"></span></p>
<p>El enunciado completo dice:</p>
<blockquote><p>
Hacer un sistema de control de asistencia de personal (para posterior verificación de ausencias y llegadas tarde con sus correspondientes justificaciones) y su parte de gestión privada (alta de usuarios y visualización de datos obtenidos a partir de la carga).</p>
<p>La pantalla principal debe quedar a la espera de DNI y contraseña.</p>
<p>Debe haber un usuario prefijado como administrador con DNI = -1234 y Contraseña = prueba.</p>
<p>En el caso de ser un usuario administrador, se podrá acceder a la parte de gestión, con las siguientes opciones:</p>
<p>	1- Alta de usuario<br />
	2- Lista de usuarios (datos adquiridos)<br />
	3- Salida a archivo<br />
	4- Cerrar la aplicación<br />
	0- Volver a la pantalla principal</p>
<p>De lo contrario, se solicitará qué tipo de acción se está realizando (Ingreso, salida, salida a almuerzo o retorno de almuerzo) y su justificación en el caso de que corresponda, y se procederá a guardar dichos datos junto a la hora actual en un registro de &#8220;Eventos&#8221; del usuario que corresponda.</p>
<p>Los datos necesarios de cada usuario son:<br />
	DNI<br />
	Nombre completo<br />
	Contraseña<br />
	Si es administrador<br />
	Eventos relacionados</p>
<p>Se desea utilizar como base una clase &#8220;PersonaBasica&#8221; que ya fue desarrollada por el departamento de sistemas, cuyo encabezado &#8220;PersonaBasica.h&#8221; se adjunta a<br />
continuación:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &quot;String.h&quot;
#include &lt;iostream&gt;

class PersonaBasica
{
	String m_sNombreCompleto;
	long m_nDNI;

public:
	//Construcción
	PersonaBasica() { m_nDNI = 0; }

	//Encapsulaciones
	long DNI() const { return m_nDNI; }
	void DNI(long val) { m_nDNI = val; }

	String NombreCompleto() const { return m_sNombreCompleto; }
	void NombreCompleto(String val) { m_sNombreCompleto = val; }
};

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; oStream, PersonaBasica&amp; rpPersonaBasica);
</pre>
<p>Nota: no se conocen en absoluto los tamaños de los datos a ingresar y se comenta que los usuarios suelen escribir justificaciones bastante elaboradas.
</p></blockquote>
<p>Cuando se inicia el programa, sólo se puede ingresar como administrador (-1234:prueba)&#8230;</p>

<pre class="console">Sistema de control de asistencia de personal
--------------------------------------------

DNI: -1234
Contraseña: prueba
Usuario "Administrador" reconocido.

Presione una tecla para continuar...

</pre>
<p>Luego, se llega al menú de administración:</p>

<pre class="console">Sistema de control de asistencia de personal (ADMNISTRACION)
------------------------------------------------------------

1- Alta de usuario
2- Lista de usuarios (datos adquiridos)
3- Salida a archivo
4- Cerrar la aplicación
0- Volver a la pantalla principal

Ingrese la opción deseada:

</pre>
<p>El siguiente paso debería ser dar de alta a los diferentes usuarios utilizando la primera opción:</p>

<pre class="console">Sistema de control de asistencia de personal (Alta de usuario)
--------------------------------------------------------------

DNI: 12345678
Nombre completo: Pedro Gutierrez
Password: 123bbb
Administrador [1 = Sí/0 = No]: 0

Persona agregada satisfatoriamente.

Presione una tecla para continuar...

</pre>
<p>Luego de esto, ellos podrán ingresar por sí mismos:</p>

<pre class="console">Sistema de control de asistencia de personal
--------------------------------------------

DNI: 12345678
Contraseña: 123bbb
Usuario "Pedro Gutierrez" reconocido.

Presione una tecla para continuar...

</pre>
<p>Para llegar a la pantalla de asistencia y así poder registrar sus acciones:</p>

<pre class="console">Asistencia de "Pedro Gutierrez"
-------------------------------

Tipo de asistencia:
        1- Ingreso
        2- Salida
        3- Salida a almorzar
        4- Vuelta de almorzar
Selección: 1

Justificación (si corresponde): Llegué tarde porque había
corte de calles.

Evento agregado satisfactoriamente.

Presione una tecla para continuar...

</pre>
<p>Cada una de ellas hasta que vuelvan a sus casas&#8230;</p>

<pre class="console">Asistencia de "Pedro Gutierrez"
-------------------------------

Tipo de asistencia:
        1- Ingreso
        2- Salida
        3- Salida a almorzar
        4- Vuelta de almorzar
Selección: 2

Justificación (si corresponde): Me voy más temprano porque
tengo que llevar a mi hijo al médico.

Evento agregado satisfactoriamente.

Presione una tecla para continuar...

</pre>
<p>Cuando cualquier administrador desee observar el listado completo de usuarios y acciones, simplemente tiene que ingresar e ir a la segunda opción del menú de administración.</p>

<pre class="console">Sistema de control de asistencia de personal (Lista de
usuarios)
------------------------------------------------------

DNI: -1234
Nombre completo: Administrador
Password: ********
Administrador: 1
Cantidad de eventos: 0
Eventos:

[Esta persona no posee eventos]


DNI: 12345678
Nombre completo: Pedro Gutierrez
Password: ********
Administrador: 0
Cantidad de eventos: 4
Eventos:

Hora: 28/07/2009 14:13:27
Tipo: Ingreso
Justificación: Llegué tarde porque había corte de calles.

Hora: 28/07/2009 14:14:23
Tipo: Salida a almorzar
Justificación:

Hora: 28/07/2009 14:14:44
Tipo: Vuelta de almorzar
Justificación:

Hora: 28/07/2009 14:14:52
Tipo: Salida
Justificación: Me voy más temprano porque tengo que llevar a
mi hijo al médico.

Presione una tecla para continuar...

</pre>
<p>Si lo desea, puede guardar esa información a un archivo utilizando, en cambio, la tercera opción:</p>

<pre class="console">Sistema de control de asistencia de personal (ADMNISTRACION)
------------------------------------------------------------

1- Alta de usuario
2- Lista de usuarios (datos adquiridos)
3- Salida a archivo
4- Cerrar la aplicación
0- Volver a la pantalla principal

Ingrese la opción deseada: 3

Ingrese la ruta del archivo a guardar: c:asistencia.txt
Archivo guardado satisfactoriamente

Presione una tecla para continuar...

</pre>
<p>Finalmente, puede cerrar el programa yendo a la cuarta opción (perdiendo todos los datos)&#8230;</p>

<pre class="console">Sistema de control de asistencia de personal (ADMNISTRACION)
------------------------------------------------------------

1- Alta de usuario
2- Lista de usuarios (datos adquiridos)
3- Salida a archivo
4- Cerrar la aplicación
0- Volver a la pantalla principal

Ingrese la opción deseada: 4
Saliendo de la aplicación...

Presione una tecla para continuar...

</pre>
<p>Esa es la idea de la aplicación&#8230;</p>
<p>Ahora voy a dejar los links para aquellos que no quieran resolverlo por sí mismos (o los que quieran ejecutarlo y verlo funcionando).</p>
<p>El código es portable entre Linux y Windows (lo testeé personalmente en ambas plataformas y funcionó idénticamente).</p>
<p>Ha sido desarrollado, compilado y testeado utilizando <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> para Windows con el <a href="http://www.mingw.org/">compilador MinGW</a> (incluído en el paquete). En Linux, fue compilado utilizando el compilador GNU GCC.</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">ControlAsistencia está liberado bajo la licencia <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/control-asistencia/ControlAsistencia_1.01.zip">Descargar ControlAsistencia v1.01</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/control-asistencia/ControlAsistencia_1.01_Source.zip">Descargar v1.01 Source Code</a></p>
</div>
<p><strong>Actualización:</strong> bug menor solucionado en String.cpp => version 1.01<br />
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia de personal en excel">control de asistencia de personal en excel</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia en excel">control de asistencia en excel</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="asistencia de personal en excel">asistencia de personal en excel</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="como hacer un control de asistencia en excel">como hacer un control de asistencia en excel</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia">control de asistencia</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="Control de Asistencia GNU">Control de Asistencia GNU</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia gpl">control de asistencia gpl</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia de personal">control de asistencia de personal</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control asistencia excel">control asistencia excel</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia linux">control de asistencia linux</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" rel="bookmark" title="Control de Asistencia (Versión wxWidgets)">Control de Asistencia (Versión wxWidgets) </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Clase Lista simple para C++">Clase Lista simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C</title>
		<link>http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/</link>
		<comments>http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 18:42:07 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Include]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Memory Leaks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=58</guid>
		<description><![CDATA[Después de algún tiempo de trabajar con C, decidí desarrollar una librería muy fácil de usar que pudiera ayudar a detectar y trazar fugas de memoria (memory leaks). Hay muchas soluciones para esto en la red, pero esta tiene la particularidad de ser realmente simple de implementar. Simplemente hay que agregar el siguiente include al [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++">cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Clase Lista simple para C++">Clase Lista simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Después de algún tiempo de trabajar con C, decidí desarrollar una librería muy fácil de usar que pudiera ayudar a detectar y trazar fugas de memoria (memory leaks).</p>
<p>Hay muchas soluciones para esto en la red, pero esta tiene la particularidad de ser realmente simple de implementar.</p>
<p><span id="more-58"></span><br />
Simplemente hay que agregar el siguiente include al archivo principal de inclusión (un archivo que sea incluido por cada archivo del proyecto) o, en el caso de que no haya uno, a cada archivo que llame a una función de alocación de memoria (malloc, realloc, calloc o free). La única precaución extra que hay que tener en cuenta es incluirlo <strong>después</strong> de los headers standard (stdio.h, stdlib.h, malloc.h, etc.).</p>
<p>Esta es la línea:</p>
<pre class="brush: plain; light: true; title: ; notranslate">#include &quot;cMemDbg.h&quot;</pre>
<p>Eso es todo&#8230; Esperabas más? Bueno, hay un último paso&#8230; Tenés que hacer esta llamada justo antes de salir del programa para poder obtener las conclusiones detalladas:</p>
<pre class="brush: plain; light: true; title: ; notranslate">PrintMemoryLeakInfo();</pre>
<p>Fácil, no?</p>
<p>Eso fue todo&#8230; En serio.</p>
<p>Ahora, antes de ir a funcionalidades más &#8220;de experto&#8221;, voy a dejar el link para descargar la librería para aquellos que no quieran seguir leyendo:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/cmemdbg/cMemDbg_1.0.zip">Descargar cMemDbg 1.0</a></p>
</div>
<p>Ahora continuemos&#8230;</p>
<p>Esta librería viene con tres parámetros configurables (disponibles en cMemDbg.c):</p>
<ul>
<li><strong>PRINT_OPERATIONS:</strong> Si está seteado en 1, se va a imprimir a la salida configurada (stdout por default) cada operación de alocación de memoria realizada en el programa (alocación o liberación). De otro modo, la librería sólo imprimirá problemas, notificaciones y el dump final. <em>[Valor predeterminado = 1]</em></li>
<li><strong>MAX_ALLOC:</strong> Largo del stack interno de memoria de la librería (en elementos). Es la máxima cantidad de alocaciones que pueden ser trazadas sin ser liberadas. Se puede incementar este valor a voluntad en casi de ser necesario. De hecho, si es necesario, la librería imprimirá un mensaje diciendo: &#8220;INTERNAL_ERROR: Allocation stack overflow, please increase MAX_ALLOC&#8221;. <em>[Valor predeterminado = 256]</em></li>
<li><strong>PRINT_OUTPUT:</strong> Destino de impresión de las notificaciones generadas por la librería (puede ser cualquier stream/archivo en el que se pueda imprimir utilizando fprintf). <em>[Valor predeterminado = stdout]</em></li>
</ul>
<p>Finalmente, hay dos funciones más que se pueden utilizar en caso de ser necesario:</p>
<ul>
<li><strong>PrintTotalAllocatedMemory():</strong> Imprime la cantidad acumulativa de memoria alocada al momento de la llamada.</li>
<li><strong>PrintMemoryReservedByCMemDbgLibrary():</strong> Imprime la cantidad de memoria reservada por la librería (definida en tiempo de compilación por la constante MAX_ALLOC).</li>
</ul>
<p>Eso es todo&#8230; Dije que era fácil de usar.</p>
<p>De todos modos si, luego de leer los comentarios del archivo cMemDbg.h, tenés algún tipo de pregunta, comentario o sugerencia, no dudes en contactarme.<br />
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="detectar fugas de memoria en c">detectar fugas de memoria en c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="cmemdbg">cmemdbg</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="c memory leak">c memory leak</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="detectar fuga memoria c">detectar fuga memoria c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="detectar fugas de memoria">detectar fugas de memoria</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="internal_error allocation stack overflow please increase max_alloc">internal_error allocation stack overflow please increase max_alloc</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="detectar memory leaks c">detectar memory leaks c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="detectar fugas de memoria c">detectar fugas de memoria c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="freebsd memory leak detection">freebsd memory leak detection</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="Detector de fugas de memoria">Detector de fugas de memoria</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++">cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Clase Lista simple para C++">Clase Lista simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/es/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
