Articolo originale: https://www.freecodecamp.org/news/c-vs-cpp-whats-the-difference/

I linguaggi di programmazione C e C++ nel mondo alimentano gran parte dei prodotti, delle applicazioni e dei siti Web.

Ciascuno ha contribuito a gettare le basi per la creazione di molti dei più popolari linguaggi di programmazione, come Java. Supportano anche molti linguaggi che potresti usare regolarmente per i tuoi progetti di programmazione, come Python.

In questo articolo troverai una panoramica generale dei due linguaggi, adatta ai principianti,  insieme alle loro principali somiglianze e differenze.

Le origini di C e di C++

La storia del linguaggio di programmazione C

Ken Thompson e Dennis Ritchie hanno lavorato per diversi anni al progetto MULTICS (Multiplexed Information and Computing Service) presso AT&T Bell Laboratories.

Dopo che il progetto si è interrotto, nel 1969 Ken Thompson ha iniziato a lavorare al suo gioco Space Travel su una macchina PDP-7 poco usata.

Nel farlo, ha finito per scrivere un sistema operativo quasi completo, Unix, da zero, in linguaggio assembly.

Durante il lavoro su MULTICS, sia Thompson che Ritchie scrivevano software di sistema e programmi di utilità utilizzando linguaggi di livello superiore. E avevano visto quanto fosse più semplice l'intero processo, rispetto al linguaggio assembly, criptico e difficile da decifrare.

Ritchie si unì a Thompson per aiutarlo a portare Unix su una macchina più recente: il PDP-11.

Durante quel periodo sperimentarono vari linguaggi di livello superiore che avrebbero potuto aiutarli a portare a termine il lavoro.

Hanno usato BCPL (Basic Combined Programming Language), che è stato ampiamente utilizzato durante l'era MULTICS. Dopo averlo provato, Thompson finì per scrivere un nuovo linguaggio: il linguaggio di programmazione B.

Il linguaggio B era simile a BCPL ma era una versione più semplice e ridotta.

Ma B non era abbastanza potente e non sfruttava appieno le nuove funzionalità e la potenza del PDP-11.

Ken_Thompson_-seduto-_e_Dennis_Ritchie_at_PDP-11_-2876612463-
Thompson (seduto) e Ritchie lavorano insieme a un PDP-11. Credito immagine e testo da Wikipedia

Dennis Ritchie iniziò a migliorare il linguaggio B e finì per creare il linguaggio di programmazione C.

C è un linguaggio portabile, il che significa che i programmi scritti in C possono essere trasferiti e utilizzati su una varietà di architetture di macchine. È molto veloce e facile da compilare e ha una mappatura diretta sul codice macchina, dando al programmatore l'accesso a funzionalità di basso livello.

Finirono per riscrivere il sistema operativo Unix in C nel 1972.

Poiché C era portatile ed era il linguaggio su cui Unix era implementato, gli sviluppatori iniziarono ad adottarlo e a usarlo ampiamente. Ciò ha portato al successo del sistema operativo Unix e, a sua volta, il linguaggio C è diventato popolare.

Dennis Ritchie e Brian Kernighan sono stati co-autori del libro "Linguaggio di programmazione C" nel 1977, che ha creato uno standard per come dovrebbe essere usato il linguaggio. Questo libro ha reso ancora più popolare la lingua.

C è estremamente significativo nella storia dell'informatica e la sua creazione ha portato alla creazione di molti altri linguaggi di programmazione. Per questo, viene spesso definita la "madre " di tutti i linguaggi di programmazione.

Storia di C++

Nel 1979, il ricercatore Bjarne Stroustrup è stato assunto presso AT&T Bell Laboratories.

Durante gli anni '70 la complessità e la potenza di calcolo dei computer aumentarono e iniziarono a sorgere limitazioni nel linguaggio di programmazione C.

All'inizio degli anni '80, Bjarne Stroustrup creò un nuovo linguaggio caratterizzato da due cose:

  • Le capacità di programmazione orientata agli oggetti di un altro linguaggio, Simula, che offriva un approccio diverso alla programmazione rispetto a C. Il codice poteva essere astratto e meglio organizzato e qualsiasi cosa poteva essere rappresentata usando le classi.
  • Il linguaggio di programmazione dei sistemi, C, che offriva la possibilità di avvicinarsi molto all'hardware della macchina e di svolgere compiti computazionali impegnativi di basso livello.

Queste due idee combinate hanno consentito un'astrazione di livello superiore senza perdere l'efficienza del basso livello di C. Quindi, è stato creato il linguaggio "C con classi ".

Nel 1984 "C con classi" è stato rinominato in C++.

Quindi, C++ è un superset di C, il che significa che è un'estensione di C e si basa su di esso. C++ fornisce solo funzionalità aggiuntive al linguaggio C.

Somiglianze tra C e C++

Di seguito sono riportate alcune delle somiglianze tra C e C++.

Sintassi e struttura del codice

La sintassi generale delle due lingue è molto simile. Gli operatori e le parole chiavi utilizzati in C vengono utilizzati anche in C++ per ottenere le stesse cose. Ma C++ ha più parole chiavi di C e ha una grammatica estesa.

I commenti in linea //, e i commenti di blocco, /* */, hanno lo stesso aspetto.

Inoltre, ogni istruzione termina con un punto e virgola, ;.

Condizionali, cicli, inizializzazione e dichiarazione di variabili: sono del tutto simili nei due linguaggi.

Sia C che C++ hanno un metodo main(), che avvia ogni programma, ed entrambi includono file di intestazione nella parte superiore dei rispettivi file, con #include.

Linguaggi di programmazione compilati

Sia C che C++ sono linguaggi di programmazione compilati.

Un compilatore è un programma software per computer.

Prende il codice sorgente che un programmatore ha scritto in un linguaggio di programmazione di livello superiore e lo traduce in un altro linguaggio comprensibile al computer.

Questo modulo è il primo codice assembly che viene nuovamente tradotto in codice macchina, la lingua nativa di tutti i computer.

Il linguaggio macchina è un insieme di istruzioni che vengono comprese direttamente dalla CPU (Central Processing Unit) di un computer.

Una volta che il codice sorgente è stato tradotto in codice macchina, viene creato un file eseguibile binario a.out.

Differenze tra C e C++

Ora diamo un'occhiata ad alcune delle differenze tra i due linguaggi.

Metodi di input e output

C e C++ utilizzano modi diversi per inviare informazioni alla console e ricevere informazioni dall'utente.

In C, scanf() viene utilizzato per l'input dell'utente, mentre printf() viene utilizzato per l'output dei dati.

In C++, std::cin >> viene utilizzato per ottenere l'input dell'utente e std::cout << viene utilizzato per l'output dei dati.

Il paradigma della programmazione

La differenza più importante tra i due linguaggi è il diverso approccio alla programmazione che ciascuno utilizza.

C è un linguaggio a orientamento procedurale e la sua enfasi è sulle funzioni.

I programmi sono suddivisi in un insieme di funzioni e sono costituiti da istruzioni passo passo, o comandi, da eseguire in ordine sequenziale.

Questo stile di programmazione specifica come fare qualcosa, fornendo passaggi strutturati per come verranno eseguiti i compiti di calcolo, seguendo un approccio dall'alto verso il basso.

Questo stile di programmazione può diventare piuttosto disordinato e soggetto a errori quando i programmi crescono di dimensioni. Porta a molte operazioni di copia e incolla in tutto il file e all'aggiornamento di molte funzioni quando viene apportata una modifica.

Oltre ad essere un linguaggio procedurale, C++ è anche un linguaggio di programmazione orientato agli oggetti , che si basa sul concetto di immergere un programma negli oggetti.

Tutto è organizzato e suddiviso in piccoli gruppi di parti o oggetti correlati , che sono un'istanza di una classe , seguendo un approccio bottom-up.

La programmazione orientata agli oggetti si basa su quattro principi: incapsulamento, astrazione, ereditarietà e polimorfismo .

Questo stile di programmazione crea codice leggibile e utilizzabile in misura maggiore e quindi più facile da mantenere, fornendo anche una migliore sicurezza dei dati.

L'STL

C++ offre STL – Standard Template Library – e C no.

Fornisce classi modello per le strutture dati e i componenti di uso comune per l'implementazione di funzionalità integrate aggiuntive.

Uno di questi componenti sono i contenitori come i Vettori , che memorizzano raccolte di oggetti.

Namespaces

Gli spazi dei nomi sono una funzionalità disponibile in C++ e non in C.

Sono contenitori utilizzati per organizzare il codice in gruppi logici di identificatori e oggetti simili sotto un nome, all'interno di un ambito.

Impediscono la collisione dei nomi quando sono presenti più librerie e prevengono il conflitto con i nomi di altri spazi dei nomi all'interno di un programma.

Un esempio di spazio dei nomi è std::.

Un modo per utilizzare uno spazio dei nomi e introdurlo in un ambito consiste nell'utilizzare la parola chiave using, ad esempio using namespace std;.

Gestione delle eccezioni

C non offre un modo per gestire le eccezioni nei programmi, cosa che invece aiuta a prevenire gli errori.

C++, invece, supporta la gestione delle eccezioni introducendo i blocchi try e catch

Estensione del file

L'estensione del file per un file che contiene il codice C è .c, mentre l'estensione del file per i file C++ è .cpp.

Dove vengono utilizzati C e C++?

C è comunemente usato per compiti di calcolo molto impegnativi e di basso livello in cui velocità, efficienza e accesso ravvicinato alla macchina sono indispensabili.

C presuppone che i programmatori sappiano cosa stanno facendo e da loro la massima  libertà.

È quindi il linguaggio preferito per sistemi operativi, dispositivi embedded, programmazione di sistemi, kernel e driver, sviluppo di compilatori e per l'industria in crescita delle applicazioni IoT (Internet of Things).

C++ ancora una volta consente al programmatore sia un accesso ravvicinato che la manipolazione della macchina, fornendo al contempo efficienza e prestazioni elevate per sistemi su larga scala. Allo stesso tempo, è di livello superiore con un'astrazione sufficiente dalla macchina.

C++ è un linguaggio popolare usato per la creazione di motori di gioco, computer grafica e programmi, applicazioni VR, browser Web come Google Chrome, Mozilla Firefox e Safari ed estensioni del browser Web. Anche il motore di ricerca di Google è costruito in C++.

Come imparare C e C++

Di seguito è riportato un elenco di alcune risorse per aiutarti a iniziare il tuo percorso di apprendimento in C e C++.

Per imparare C:

Per imparare C++:

Conclusione

Grazie per essere arrivato alla fine e spero che questo articolo ti sia stato utile.

Hai appreso le origini di C e C++ e il loro background storico. Hai quindi visto alcune delle loro somiglianze e differenze, come viene utilizzato ogni linguaggio e alcune risorse per iniziare ad imparare le lingue.

Buona codifica!