EnneBi – Programmazione

IndietroIndiceAvanti

Da C a C++ e viceversa

Il toolkit FLTK implementa un ampio insieme di classi (principalmente) e funzioni necessarie per la costruzione di interfacce grafiche ma per il resto si appoggia alle funzionalità disponibili nel linguaggio C/C++. Per esempio le stringhe che vengono spesso utilizzate come parametri nei metodi delle classi, sono definite alla maniera del C. Una stringa in C è un vettore di char e il nome rappresenta un puntatore al primo carattere e in questo modo si può trattare in modo più veloce di quanto lo si possa, per esempio, come oggetto della classe string, come nel C++, anche se dal punto di vista della facilità della scrittura del codice un oggetto della classe string permette, con i metodi che rende disponibili, elaborazioni più comode.

In questo paragrafo si tratterà della gestione delle stringhe in C in modo da avere gli strumenti per le elaborazioni più comuni che possono essere effettuate con i mezzi disponibili delle librerie C. Qualora occorressero elaborazioni che potessero essere svolte più facilmente per mezzo dei metodi della classe string del C++ si vedrà un esempio di codice per la conversione da un tipo all'altro.

Le stringhe in C sono vettori di tipo carattere la cui fine è segnalata da un carattere NULL (carattere terminatore), indicato come '\0'. Il carattere NULL è il primo codice ASCII corrispondente al valore binario 00000000 e non ha niente a che vedere con il carattere 0 che ha, in ASCII, codice binario 00110000.

char a[10];

dichiara un vettore costituito da un massimo di dieci caratteri e:

char frase[] = "Oggi non piove";

dichiara il vettore monodimensionale frase il cui numero di caratteri è determinato dalla quantità di caratteri presenti fra doppi apici più uno (il carattere NULL che chiude la stringa).

Nonostante il linguaggio C non possieda un dato di questo tipo, per il trattamento delle stringhe sono disponibili parecchie funzioni, delle quali in questa sede vengono trattate quelle che possono essere interessanti per le elaborazioni proposte.

Le funzioni esaminate per il trattamento delle stringhe richiederebbero, per poter essere utilizzate, l'inclusione della libreria che le contiene (#include <cstring>) ma tale libreria è già inclusa nei file di definizione di FLTK e, quindi, si possono utilizzare, laddove servono, senza necessità di specificare l'inclusione.

Potrebbe essere utile convertire un dato da un formato ad un altro.

// conversione da char[] del C (stringa C type)
// a string del C++ (stringa C++ type)

char a[] = "Prova conversione in string"; 
string b; 

b.assign(a);   // anche b conterrà ora la stessa stringa

// conversione inversa da string a char* 

char s[20]; 
string d = "Al contrario"; 

strcpy(s,d.c_str());   // ora s contiene la stessa stringa

// da float/double o int a char* 

float e=12345.12; 
char g[10]; 
 
int h=67;
char j[10];

sprintf(g,"%4.2f",e); // g conterrà il valore float trasformato
sprintf(j,”%d”,h);    // j conterrà il valore int trasformato

// da char* a float/double o int 
// normalmente richiederebbero #include <cstdlib> ma 
// la libreria è già inclusa nei file di definizione delle FLTK

char intero[]=”123”;
char puntoDec[]=”456.78”;
int valI;
float valF;

valI = atoi(intero);   // valore numerico
valF = atof(puntoDec); // valore numerico

Il codice per la presenza di righe di commento esplicative non richiede ulteriori specificazioni.

IndietroIndiceAvanti