Tutorial – formattazione Output in C e C++

Come utilizzare le sequenze di Escape in linguaggio C

Nel linguaggio C l’istruzione printf contiene direttamente il codice di stampa del colore ad esempio il codice
“\x1b[32” indica che il colore del testo di scrittura nella Console è verde quindi un’istruzione di Output in C
del tipo printf(“\x1b[32 Hello World !”);
produce come effetto una stampa della scritta in colore Verde.
Invece una printf(“\x1b[42 Hello World”);
produce una stampa della scritta bianca su sfondo verde.
Tale approccio in linguaggio C è valido per ambienti “Unix/Linux” dove di default è abilitata la funzionalità “Virtual Termina”.
Nel sistema operativo Windows la questione è più complessa poiché la Console viene gestita diversamente e due sono gli approcci possibili: abilitare la funzionalità Virtual Termina da codice (è fatto nel programma in C), oppure sempre con l’inclusione della libreria “windo.h”.
All’inizio del programma occorre inserire le seguenti direttive:

#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING  0x0004
#endif

All’interno programma occorre inserire prima di utilizzare le sequenze di Escape le seguenti istruzioni:

// definisce il canle standard di output
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    // usa il canale handler per capire in quale modalità è settata la console
	DWORD dwMode = GetConsoleMode(hOut, &dwMode);
	// imposta il buffer della conole a virtual temrinal
    dwMode = dwMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
	// imposta la nuova modalità di output per la console *nix based
	SetConsoleMode(hOut, dwMode);

Alla fine viene mostrato un programma in C che stampa una scritta colorata.

Nel linguaggio C++

Nel linguaggio C++ il codice in ambiente *nix è identifico a quello utilizzato in C con la differenza di aggiungere l’istruzione “cout” al posto dalla “printf”-
Il codice C++ di esempio definisce le costanti T_COLORE e SF_COLORE con i codici dei colori per il testo e per lo sfondo. Attraverso una semplice istruzione viene visualizzata una scritta rossa su sfondo verde.

#define T_MAGENTA "\x1b[35m"
#define T_CIANO  "\x1b[36m"
#define T_WHITE  "\x1b[37m"

#define SF_RED  "\x1b[41m"
#define SF_VERDE  "\x1b[42m"
#define SF_GIALLO  "\x1b[43m"
#define SF_BLU  "\x1b[44m"
#define SF_MAGENTA "\x1b[45m"
#define SF_CIANO  "\x1b[46m"
#define SF_BIANCO  "\x1b[47m"

#define RST_COLORE "\x1b[0m"

int main ()
{
  cout <<T_ROSSO << SF_VERDE  "Ciao mondo !"  RST_COLORE<< endl;
  return 0;
}

In ambiente Windows sono aggiunte le righe mostrate sopra-