Linguaggi di programmazione C e C++

Introduzione a C e C++

Autore: Andrea Pacchiarotti
Ultimo aggiornamento: 02 Marzo 2023
Categoria: Programmazione C C++

Programmazione C C++
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 a 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, appunto, 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 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 è 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 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:

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.

Eseguire il debug con Dev-C++

Il debugging (o debug) è l'attività d'individuazione e correzione da parte del programmatore degli errori (bug) rilevati nel programma. È una delle operazioni più importanti, a volte difficile se il programma è complesso e anche delicata per il pericolo di inserire nuovi errori nel tentativo di correggere quelli per i quali si svolge l'attività di debug.
Per attivare il debug su Dev-C++ seguire la seguente procedura:

  1. Strumenti
  2. Opzioni di compilazione
  3. Generazione di Codice Ottimizzazioni
  4. Linker
  5. mettere Yes su Genera le informazioni per il debug

Per eseguire il debug su Dev-C++ seguire la seguente procedura:

  1. Compilare il programma
  2. cliccare Esegui Debug

Se viene riscontrato un errore comparirà una riga evidenziata per segnalare che lì c’è un errore. Correggerlo ed eseguire nuovamente il programma.

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++ (o Java) e allenarti con gli esercizi, ti consiglio...

Fondamenti di C e C++ Teoria e pratica

Versioni cartacea e digitale aggiornate a Febbraio 2023 - 303 pagine
LINK TESTUALE versione digitale
LINK TESTUALE versione cartacea

Questo manuale fornisce le basi 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 molti codici commentati in italiano. Un testo 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