C++ eredita molto da C, e sebbene sia prevalente nello sviluppo di applicazioni e giochi per computer, C rappresenta un’ottima porta d’accesso al mondo della programmazione, specialmente per i neofiti. Scopriamo insieme il perché.
Che cos’è il linguaggio C?
C è un linguaggio di programmazione di tipo strutturale e di alto livello. I programmi creati in C si distinguono per la loro portabilità. La sua robustezza lo rende uno dei linguaggi di programmazione più validi e diffusi, impiegato nella realizzazione di sistemi embedded, driver, kernel, applicazioni di sistema, sistemi operativi (come Microsoft Windows e Apple OS X), database (come MySQL) e svariati applicativi IoT.
C è un linguaggio che viene compilato, introducendo un livello di astrazione tra il codice macchina e il programma.
Un semplice programma in C, pensato per sommare due numeri, potrebbe essere strutturato nel modo seguente:
#include<stdio.h> int main() { int a, b, sum; printf("Inserisci due numeri da sommare: "); scanf("%d%d", &a, &b); sum = a + b; printf("nLa somma di %d e %d è %d", a, b, sum); return 0; }
Questo è l’output che ne risulta:
Output di un programma C di esempio
I programmi C includono l’intestazione stdio.h, che gestisce l’input e l’output standard.
STDIO mette a disposizione le funzioni basilari di input/output, come printf e scanf. La funzione printf serve a visualizzare dati (come messaggi e output) sulla console, mentre scanf riceve input dalla stessa. In questo contesto, %d indica che i numeri gestiti sono di tipo intero.
Se si utilizzassero valori decimali, si otterrebbero risultati inaspettati. Per evitarlo, si può ricorrere a %f. La funzione main() è la prima ad essere eseguita durante l’avvio del programma. La sintassi è basilare: si dichiarano i tipi di variabili e poi le si usa.
Che cos’è il C++?
C++ si fonda sui concetti della programmazione a oggetti, come l’astrazione, il polimorfismo, l’ereditarietà e l’incapsulamento. C++ può essere visto come un’estensione di C, arricchita dalla nozione di classi e oggetti.
L’uso di oggetti per l’archiviazione di dati ha introdotto un livello di organizzazione superiore nei programmi. Ad esempio, per memorizzare i dati relativi a uno studente, si può creare una classe Studente, includendo attributi come nome, età, hobby, voti, e così via. È possibile creare un’istanza di studente ogni qualvolta sia necessario!
class Student { public: char name[20]; int age; float marks; }; //Questo crea un oggetto Student student1 = new Student();
In pratica, l’oggetto verrà creato, e la memoria allocata, solo durante l’esecuzione del programma.
C++ garantisce prestazioni elevate, motivo per cui continua ad essere la scelta principale per lo sviluppo di motori grafici, sistemi embedded, browser, compilatori e applicazioni di elaborazione grafica e immagini.
Diversi database, come MongoDB, sono scritti in C++. Analogamente a C, anche C++ è portabile.
Rielaboriamo il nostro programma di addizione in C++, notando le diverse funzioni coinvolte:
#include <iostream> using namespace std; int main() { int a, b; cout << "Inserisci i numeri: "; cin >> a >> b; int sum = a + b; cout << a << " + " << b << " = " << sum; return 0; }
Si noti l’uso di cout e cin al posto di printf e scanf. Inoltre, le dichiarazioni di tipo possono avvenire in qualsiasi punto del programma, purché la variabile sia dichiarata prima del suo uso (come nel caso di sum). La stampa del risultato è immediata, con l’uso diretto dei nomi delle variabili. Si noti l’uso dello spazio dei nomi std, definito nell’intestazione iostream. std contiene metodi quali cout, cin e altri.
Analogie tra C e C++
C si può considerare un sottoinsieme di C++. Ci sono diverse somiglianze tra C e C++, sia per quanto riguarda la scrittura dei programmi, sia per gli ambiti di utilizzo. Entrambi sono robusti, portabili e offrono prestazioni elevate. Alcune delle somiglianze principali sono:
N. | Caratteristica | Spiegazione |
1. | Sintassi | Condividono una sintassi simile, per esempio nella dichiarazione delle variabili, nell’uso del punto e virgola alla fine delle righe e nelle convenzioni di denominazione. |
2. | Struttura e Procedura | Ogni riga di codice viene eseguita una dopo l’altra. I programmi sono strutturati con le importazioni iniziali, le dichiarazioni di variabili e poi il codice principale. |
3. | Funzione Main() | L’esecuzione del codice avviene all’interno della funzione main(). main() è la prima funzione invocata all’avvio del programma. |
4. | Puntatori | Sia C che C++ usano i puntatori in modo analogo. Un puntatore è una variabile che memorizza l’indirizzo di memoria di un’altra variabile. Ad esempio, int a = 1;. A seguito di questa istruzione, viene allocata una zona di memoria (per esempio, XX0011) per a. Si può accedere a questa zona di memoria tramite l’operatore &, come in int ptr_a = &a;. |
5. | Parole chiave e operatori | Tutte le parole chiave e gli operatori di C sono validi anche in C++. Ad esempio, scope, static, public, int, ecc. C++ mette a disposizione ulteriori parole chiave e operatori. |
Somiglianze tra C e C++
Differenze tra C e C++
C++ è nato con l’obiettivo di superare alcune limitazioni di C e, di fatto, lo estende. Pertanto, un programma scritto in C è valido anche in C++, ma non è vero il contrario! La principale differenza è che C++ è orientato agli oggetti (OOP). Inoltre, C++ pone una maggiore attenzione sul controllo del tipo. Altre differenze più sottili sono:
C | C++ |
Sviluppato tra il 1969 e il 1973 da Dennis Ritchie presso i laboratori AT&T Bell. | Sviluppato da Bjarne Stroustrup nel 1979. |
Non segue i principi della programmazione orientata agli oggetti. | Si basa sui concetti della programmazione orientata agli oggetti, come incapsulamento, polimorfismo ed ereditarietà. |
C include un totale di 32 parole chiave come char, switch, int, static, union, etc. | Tutte le parole chiave di C sono valide in C++, con 31 parole chiave aggiuntive. |
Supporta solo la programmazione procedurale. | C++ supporta molteplici paradigmi di programmazione, come OOP, programmazione generica e funzionale. |
Non si possono implementare funzioni OOP in C. | Funzionalità come le classi friend e le funzioni virtuali in C++ migliorano le capacità OOP. |
C supporta i tipi di dati predefiniti. | C++ supporta sia i tipi di dati predefiniti che quelli definiti dall’utente mediante il concetto di classi. |
Non prevede l’overloading di operatori o funzioni. | C++ supporta sia l’overloading di operatori che di funzioni (polimorfismo). |
L’allocazione di memoria avviene tramite le funzioni malloc() e calloc(), e la deallocazione tramite free(). | L’allocazione di memoria avviene tramite l’operatore new, e la deallocazione tramite l’operatore delete. |
C non supporta la gestione delle eccezioni. | C++ supporta la gestione delle eccezioni. |
Si concentra sulla procedura o sul metodo, più che sui dati. | Ha una maggiore attenzione sui dati. |
Differenze tra C e C++
Altre importanti funzionalità presenti solo in C++ sono:
- Tramite la parola chiave namespace, è possibile creare variabili con lo stesso nome in namespace diversi.
- È possibile usare funzioni all’interno delle struct. Le strutture possono avere modificatori di accesso.
- Supporta variabili di riferimento.
Quando usare C o C++
È frequente tra i programmatori il quesito: perché dovrei imparare C quando posso fare tutto in C++?
Lo studio di C consente di acquisire una base solida su strutture dati, puntatori, parole chiave, concetti di stack, heap e gestione della memoria.
Inoltre, C è ancora molto usato per app ad alte prestazioni, dato che il compilatore C è più veloce del compilatore C++. Pertanto, se si devono sviluppare blocchi di codice che non necessitano di oggetti e classi, funzioni virtuali o template, C è preferibile, mentre C++ potrebbe essere eccessivo con le sue vaste librerie.
La maggior parte dei codici di basso livello (come kernel, sistemi operativi e database) è ancora mantenuta in C, quindi conoscerlo aiuta ad imparare C++ più velocemente.
C++ è ritenuto uno dei linguaggi più veloci ed efficienti, ed è per questo che continua ad essere uno dei migliori linguaggi, soprattutto per applicazioni ad alte prestazioni come motori grafici, dispositivi IoT e app desktop. Molte applicazioni usano una combinazione di codice C e C++ per raggiungere prestazioni ottimali e sfruttare i vantaggi della programmazione orientata agli oggetti.
Riepilogo
In questo articolo, abbiamo esplorato le basi di C e C++, con un semplice esempio. Abbiamo evidenziato le somiglianze e le differenze principali, indicando anche i casi in cui è preferibile l’uno o l’altro.
Se stai muovendo i primi passi nel mondo dello sviluppo software, iniziare con C può darti un vantaggio, dato che è semplice e copre i concetti fondamentali della programmazione, come strutture dati, puntatori, memoria, e così via.
Potrebbe interessarti l’uso del compilatore C online e del compilatore C++ di winadmin.it.