<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Coses_%C3%BAtils_C%2B%2B</id>
	<title>Coses útils C++ - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Coses_%C3%BAtils_C%2B%2B"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Coses_%C3%BAtils_C%2B%2B&amp;action=history"/>
	<updated>2026-08-30T08:07:03Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://wiki.joanillo.org/index.php?title=Coses_%C3%BAtils_C%2B%2B&amp;diff=248692&amp;oldid=prev</id>
		<title>Joan a 20:25, 31 gen 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Coses_%C3%BAtils_C%2B%2B&amp;diff=248692&amp;oldid=prev"/>
		<updated>2012-01-31T20:25:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__TOC__&lt;br /&gt;
=Redireccionar sortida=&lt;br /&gt;
A vegades interessa distingir entre la sortida estàndar, la sortida d'errors o els log:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// http://cmasomenos.blogspot.com/2010/09/iostream-redireccionar-clog-para.html&lt;br /&gt;
// g++ -o prova prova.cpp&lt;br /&gt;
// ./prova 1&amp;gt;stdout.txt 2&amp;gt;stderr.txt&lt;br /&gt;
//  $ cat stderr.txt&lt;br /&gt;
// B&lt;br /&gt;
// $ cat stdout.txt&lt;br /&gt;
// A&lt;br /&gt;
// $ cat test.log&lt;br /&gt;
// C&lt;br /&gt;
// o bé més senzill:&lt;br /&gt;
// ./prova &amp;gt; hola.txt&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;fstream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  // Creamos un archivo de salida para logging.&lt;br /&gt;
  ofstream test_log;&lt;br /&gt;
  test_log.open(&amp;quot;test.log&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // Obtenemos el streambuf actual de clog (esto&lt;br /&gt;
  // lo usaremos luego para restaurar el streambuf&lt;br /&gt;
  // a su valor original, por si las moscas).&lt;br /&gt;
  streambuf* old_rdbuf = clog.rdbuf();&lt;br /&gt;
&lt;br /&gt;
  // Reemplazamos el streambuf de clog con el del archivo.&lt;br /&gt;
  // Ahora ambos streams utilizarán el mismo streambuf (es&lt;br /&gt;
  // decir, escriben en el archivo test.log).&lt;br /&gt;
  clog.rdbuf(test_log.rdbuf());&lt;br /&gt;
&lt;br /&gt;
  // Hacemos lo mismo que el ejemplo original.&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;A\n&amp;quot;;&lt;br /&gt;
printf(&amp;quot;hola joan\n&amp;quot;);&lt;br /&gt;
  cerr &amp;lt;&amp;lt; &amp;quot;B\n&amp;quot;;&lt;br /&gt;
  clog &amp;lt;&amp;lt; &amp;quot;C\n&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
  // Restauramos el viejo streambuf de clog.&lt;br /&gt;
  clog.rdbuf(old_rdbuf);&lt;br /&gt;
&lt;br /&gt;
  // Cerramos el archivo.&lt;br /&gt;
  test_log.close();&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=printf (sortida) amb colors, negreta i subratllat=&lt;br /&gt;
*http://blog.edwards-research.com/2011/04/colored-output-in-cc-part-1/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ gcc -o cprintf_test cprintf_test.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''cprintf.h''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
// (C)2011 Edwards Research Group&lt;br /&gt;
// You are licensed to use this work under a CC-BY-SA License.&lt;br /&gt;
// See: http://blog.edwards-research.com/about/&lt;br /&gt;
//      http://creativecommons.org/licenses/by-sa/3.0/us/&lt;br /&gt;
//&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
 &lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdarg.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
#define CLR_BLACK   0&lt;br /&gt;
#define CLR_RED     1&lt;br /&gt;
#define CLR_GREEN   2&lt;br /&gt;
#define CLR_YELLOW  3&lt;br /&gt;
#define CLR_BLUE    4&lt;br /&gt;
#define CLR_MAGENTA 5&lt;br /&gt;
#define CLR_CYAN    6&lt;br /&gt;
#define CLR_WHITE   7&lt;br /&gt;
 &lt;br /&gt;
#define ATTR_NONE       0&lt;br /&gt;
#define ATTR_BOLD       1&lt;br /&gt;
#define ATTR_DIM        2&lt;br /&gt;
#define ATTR_UNDERLINE  4&lt;br /&gt;
#define ATTR_BLINK      5&lt;br /&gt;
#define ATTR_REVERSE    7&lt;br /&gt;
 &lt;br /&gt;
void cprint_init(int fg, int attr, int bg)&lt;br /&gt;
{&lt;br /&gt;
    if(bg != -1){&lt;br /&gt;
        printf(&amp;quot;%c[%d;%d;%dm&amp;quot;,27,attr,(30+fg),(40+bg));&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        printf(&amp;quot;%c[%d;%dm&amp;quot;,27,attr,(30+fg));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
void cprint_rst(void)&lt;br /&gt;
{&lt;br /&gt;
    printf(&amp;quot;%c[%dm&amp;quot;, 27, 0);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
int cprintf(int fg, int a, int bg, char * fmt, ...)&lt;br /&gt;
{&lt;br /&gt;
    va_list args;&lt;br /&gt;
    va_start(args, fmt);&lt;br /&gt;
 &lt;br /&gt;
    cprint_init(fg,a,bg);&lt;br /&gt;
    vprintf(fmt, args);&lt;br /&gt;
    cprint_rst();&lt;br /&gt;
 &lt;br /&gt;
    va_end(args);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''cprintf_test.c''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//&lt;br /&gt;
// (C)2011 Edwards Research Group&lt;br /&gt;
// You are licensed to use this work under a CC-BY-SA License.&lt;br /&gt;
// See: http://blog.edwards-research.com/about/&lt;br /&gt;
//      http://creativecommons.org/licenses/by-sa/3.0/us/&lt;br /&gt;
//&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
 &lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
#include &amp;quot;cprintf.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
    printf(&amp;quot;Unformatted...\n&amp;quot;);&lt;br /&gt;
    // Example with&lt;br /&gt;
    cprintf(4,1,-1,&amp;quot;Blue Bold...\n&amp;quot;);&lt;br /&gt;
    cprintf(CLR_GREEN,ATTR_UNDERLINE,-1,&amp;quot;Green Underlined...\n&amp;quot;);&lt;br /&gt;
    cprintf(CLR_YELLOW,ATTR_NONE,CLR_RED,&amp;quot;Yellow on Red...&amp;quot;);&lt;br /&gt;
    printf(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    int i,j;&lt;br /&gt;
    for(i=0; i&amp;lt;8; i++)&lt;br /&gt;
    {&lt;br /&gt;
        for(j=0; j&amp;lt;8; j++)&lt;br /&gt;
        {&lt;br /&gt;
            if(j == 3 | j == 6){ continue; }&lt;br /&gt;
            cprintf(i,j,-1,&amp;quot;FG=%d,A=%d&amp;quot;, i, j);&lt;br /&gt;
            printf(&amp;quot;    &amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I el codi mínim per fer negreta i subratllat, sense include: negreta.cpp&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ g++ -o negreta negreta.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdarg.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
#define ATTR_BOLD       1&lt;br /&gt;
#define ATTR_UNDERLINE  4&lt;br /&gt;
 &lt;br /&gt;
void cprint_init(int fg, int attr, int bg)&lt;br /&gt;
{&lt;br /&gt;
    if(bg != -1){&lt;br /&gt;
        printf(&amp;quot;%c[%d;%d;%dm&amp;quot;,27,attr,(30+fg),(40+bg));&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        printf(&amp;quot;%c[%d;%dm&amp;quot;,27,attr,(30+fg));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
void cprint_rst(void)&lt;br /&gt;
{&lt;br /&gt;
    printf(&amp;quot;%c[%dm&amp;quot;, 27, 0);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
int cprintf(int fg, int a, int bg, char * fmt, ...)&lt;br /&gt;
{&lt;br /&gt;
    va_list args;&lt;br /&gt;
    va_start(args, fmt);&lt;br /&gt;
 &lt;br /&gt;
    cprint_init(fg,a,bg);&lt;br /&gt;
    vprintf(fmt, args);&lt;br /&gt;
    cprint_rst();&lt;br /&gt;
 &lt;br /&gt;
    va_end(args);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    printf(&amp;quot;Unformatted...\n&amp;quot;);&lt;br /&gt;
    cprintf(-1,1,-1,&amp;quot;negreta\n&amp;quot;);&lt;br /&gt;
    cprintf(-1,4,-1,&amp;quot;subratllat\n&amp;quot;);&lt;br /&gt;
    printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=char * amb caràcters estranys=&lt;br /&gt;
Recordem que hi ha el caràcter NULL terminating character: '\0'. M'hi he barallat bastant en el projecte smf_parser.&lt;br /&gt;
&lt;br /&gt;
{{Autor}}, gener 2012&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>