Linguaggi di programmazione C e C++

Introduzione a C e C++

Autore: Andrea Pacchiarotti
Ultimo aggiornamento: 08 Settembre 2020
Categoria: Programmazione C C++

Corsi di formazione Office di Andrea Pacchiarotti
Linguaggi di programmazione C e C+

Un'interessante introduzione ai linguaggi di programmazione C e C++ corredata da alcuni esempi pratici con relative spiegazioni.

Sommario Linguaggi di programmazione C e C+

Introduzione al C e C++

I linguaggi di programmazione servono a scrivere programmi ovvero sequenze di istruzioni redatte in linguaggio macchina, le uniche elaborabili dalla CPU, cioè dal processore del computer, e formate da sequenze di 0 e 1 (linguaggio binario). In particolare il linguaggio di programmazione  C, progettato da Dennis Ritchie su UNIX nel 1972, discende dal B che, a sua volta, discende dal BCPL. Nel 1989 l’ANSI (Istituto Nazionale Americano per gli Standard) ha standardizzato il linguaggio C,  definendo l'ANSI C. Con l’evoluzione C++ (1982), C è stato orientato agli oggetti (OOP), molto utile se si ha che fare con grandi progetti dato che permette al programmatore di gestire le singoli componenti del programma come oggetti.
Java, nato nel 1992 grazie a James Gosling e con l’iniziale nome di Oak, è quasi considerabile un'evoluzione del C++ dato che la sua sintassi deve molto al C/C++. Java però è un linguaggio di programmazione multipiattaforma orientato al Web, il cui motto è: write once, run everywhere. Infatti in teoria il medesimo programma scritto in Java è eseguibile su Windows, Linux e Mac e anche su smartphone, se esiste una JVM (Java Virtual Machine) per quel sistema.
Abbiamo visto la nascita di tanti altri linguaggi, anche di script (un’esemplificazione dei linguaggi di programmazione) abbastanza semplici come Perl e Python (entrambi sviluppati da C). Microsoft ha un suo ambiente di sviluppo basato sul C++ (Visual C++) e ha anche sviluppato C# (C sharp), un linguaggio a oggetti che prende spunto, tra gli altri, anche da C++ e Java. Esiste poi l’Objective C, anch’esso orientato agli oggetti,che consente lo sviluppo di applicazioni per iOS.
I listati di codice C permettono di gestire bit, byte e indirizzi di memoria, a differenza di altri linguaggi di alto livello. È un linguaggio portabile, ossia un listato scritto in ANSI C può essere compilato su ogni compilatore di ogni sistema operativo. C è un linguaggio usato tanto per semplici programmi, tanto per programmare sistemi operativi: si presta a un'infinità di usi, grazie alle varie librerie. C++ contiene C. Quindi studiare C non è assolutamente una perdita di tempo in quanto nel C++ si ritrovano gli stessi costrutti, cambiano solo alcuni comandi. Un programma scritto in C verrà dunque compilato anche da un compilatore C++. Ciò significa anche che un listato in C sarà facilmente riscrivibile in C++, modificando pochi termini.
Il post non tratterà la programmazione a oggetti ma si occuperà della programmazione procedurale, anche se sarebbe più corretto dire strutturata come vedremo tra poco, per la quale le differenze tra C e C++ sono poche, eccone alcune:

Peculiarità linguaggio C

Per far scrivere Ciao in C:

#include <stdio.h>
int main() {
printf ("Ciao\n");
}

Per far scrivere Ciao in Assembly per Intel:

IDEAL
MODEL SMALL
STACK 100h
DATASEG
HW      DB      "Ciao", 13, 10, '$'
CODESEG
Begin:
MOV AX, @data
MOV DS, AX
MOV DX, OFFSET HW
MOV AH, 09H
INT 21H
MOV AX, 4C00H
INT 21H
END Begin

Tecniche di programmazione

Esistono i metodi di:

Programmazione Procedurale
Nei programmi procedurali (es. Cobol, Fortran, Basic) le istruzioni, che vengono eseguite sequenzialmente una dopo l'altra, sono organizzate in blocchi  (subroutine o function) studiati per un preciso scopo, accessibili a cascata o attraverso il comando goto da più punti del codice. Il codice è eseguito dall'inizio alla fine (top-down) ed è semplice da seguire.
Programmazione Strutturata
Concorre alla nascita della programmazione strutturata la critica al goto, che rappresentava, negli anni Sessanta, lo strumento principe usato in programmazione, ma deleterio per leggibilità e modificabilità del software (il cosiddetto problema dello spaghetti code) e che quindi non dovrebbe essere usato. Mantiene un approccio top-down ma l'esecuzione delle istruzioni non è obbligatoriamente in ordine sequenziale bensì  influenzata da cicli e condizioni basate sul valore dei dati (es. C, Pascal, Algol).

Programmazione ad Oggetti
Il modello OOP (es. Java, C#, C++) necessita di maggiore codice perché bisogna prima instanziare un oggetto (una sorta di contenitore detto classe), ma ha un’implementazione centralizzata su quell’oggetto e tutti gli oggetti possono comunicare tra loro, ciò consente una potenzialità maggiore. Diversamente dai linguaggi già descritti, gli OOP hanno un approccio di progettazione bottom-up, ovvero la prima cosa da fare è la progettazione degli oggetti.

Programma compilato e interpretato

Un programma si sviluppa scrivendo codice sorgente in un certo linguaggio.
Linguaggi come FORTRAN,  COBOL , C-based (C, C++, C#) .NET, Objective-C, Visual Basic, ecc. sono linguaggi compilati e seguono questi passi:

I linguaggi compilati hanno ottime prestazioni.
Nei linguaggi interpretati, ad esempio PHP o Perl, il codice sorgente viene invece interpretato al volo da un programma chiamato interprete che traduce istantaneamente il codice sorgente in linguaggio macchina; ad esempio quando il codice PHP viene elaborato, restituisce una pagina HTML pura.
I linguaggi interpretati hanno alta portabilità, ma problemi relativi al carico di lavoro maggiore per il processore (che ogni volta deve elaborare la pagina) e nella ricerca di errori nel codice sorgente.

Java è una via di mezzo, è sia compilato che interpretato: il codice sorgente viene compilato in un formato intermedio (chiamato bytecode) che fornisce un file con estensione .class, il quale viene interpretato dalla Java Virtual Machine (JVM), che ha il compito di interpretare al volo le istruzioni bytecode in istruzioni per il processore ed eseguire il programma. È uno dei  punti di forza del Java, che lo ha reso portabile verso ogni piattaforma. Questa metodologia implica inoltre la possibilità di controllare eventuali errori del codice sorgente (grazie alla compilazione), di creare programmi relativamente leggeri (il bytecode è un formato che crea file di dimensioni ragionevoli), ma ha prestazioni non proprio ottime.

Java
Esempio.java
Compilazione
Esempio.class
Interpretazione
Java Virtual Machine
Esecuzione
Macchina reale
C++
Esempio.cpp
Compilazione
Esempio.exe
Esecuzione
-
-
Macchina reale

Primo programma in C++

Anche se per programmare in C/C++ è possibile usare qualsiasi editor di testi, anche il Blocco Note dei Sistemi Operativi Windows o il tool a pagamento Visual C++ o altri programmi ancora, in questo manuale si utilizzerà il software gratuito Dev-C++.
Per scrivere il primo programma in C++ si proceda nel modo seguente ricordando che C++, come C, è case-sensitive cioè distingue tra maiuscole e minuscole quindi, ad esempio, MAIN() o Main() non è main():

#include <iostream>
using namespace std;
int main (){
cout<<”Hello world!\n”;
system(“pause”);   
return 0;
}

Spiegazione del programma

Sequenze di escape C e C++

La sequenza formata dalla barra rovesciata seguita da uno o più caratteri è detta sequenza di escape e corrisponde a un carattere.
\n (new line) porta il cursore all’inizio della riga successiva
\t (tab) porta il cursore al prossimo fermo di tabulazione (ogni tabulazione è di 8 caratteri)
\a (alert) emette un beep
\f (form feed) nuova pagina
\r (carriage return) ritorno a capo
\’ stampa un apice
\” stampa le virgolette
\\ barra rovesciata
\? Punto di domanda
\b (Backspace) Indietro di un carattere
\<cifreOttali> Il carattere corrispondente nel codice ASCII al numero ottale
\x<cifreEsadec> Il carattere corrispondente nel codice ASCII al numero esadecimale


La sequenza di escape consente di inserire il carattere corrispondente a un qualsiasi codice ASCII in due modi:

È possibile attaccare più sequenze di escape una dopo l’altra.

Esercizi in C e C++

Dopo l’esempio iniziale in C++ vediamo ora dei semplici esercizi in C e C++ con relativi commenti.
C Scrivi Ciao sul monitor ed emetti un beep #include <stdio.h>  //Direttiva al preprocessore per usare printf
int main() { /*int dice al Sistema Operativo che main(), cioè il programma, gli restituirà un intero*/
printf ("Ciao\a"); //Stampa (mostra) un messaggio sul monitor
return 0;
}

C Scrivi sul monitor Ciao! e vai a capo, poi scrivi Questo è un mio programma e vai due volte a capo, infine scrivi Premi un carattere da tastiera per uscire

#include <stdio.h>
#include<conio.h> //per usare getch()
int main()
{
printf ("Ciao!\nQuesto è un mio programma\n\n");
printf("Premi un carattere da tastiera per uscire.\n");
getch(); //Mette in pausa la console di output finché non viene premuto un tasto
return 0;
}

C++ Stampa a video partendo dalla seconda riga con cout<< o cout << (console output). Esiste un’altra funzione di I/O chiamata cin>> (console input) per l’input dei dati.
abc
def
ghi
lmn
opqrs
tuvz
Premere un tasto per continuare…

#include <iostream> //Per usare cout
#include <stdlib.h> //Per usare system
using namespace std;
main(){
cout << "\nabc\n";
cout << "def\n";
cout << "ghi\n";
cout << "lmn\n";
cout << "opqrs\n";
cout << "tuvz\n";
system("pause");
}


Se desideri approfondire C e C++ ti consiglio...

Fondamenti di C e C++ Teoria e pratica

Versioni cartacea e digitale aggiornate a Settembre 2020 - 166 pagine

Questo manuale fornisce gli strumenti per portare chiunque a diventare un programmatore nei linguaggi C e C++. Lo fa senza appesantire troppo la teoria, che comunque tratterà di tutti i costrutti fondamentali di questi linguaggi, ma attraverso moltissimi codici commentati in italiano. Un testo completo, ricco di contenuti ed esempi, accessibile anche ai neofiti della programmazione. Il manuale contiene il link per scaricare tutti i codici C e C++, e relativi commenti, degli esempi proposti.



Se l'articolo ti è piaciuto, condividilo!

Segui l'hashtag #AndreaPacchiarotti