Informatica 5
Scrivere e compilare programmi
Scrivere programmi
• Scrivere programmi significa esprimere un
algoritmo in un linguaggio comprensibile al
calcolatore, ossia utilizzando un linguaggio di
programmazione (ad es.: C++)
• Un programma in C++, prima di essere
eseguito dal calcolatore, deve essere
compilato, ossia elaborato da un compilatore
Il compilatore
• Il compilatore è anch’esso un programma in
funzionamento nel calcolatore, ed ha lo scopo
di tradurre programmi scritti in un linguaggio
di programmazione in eseguibili, ossia
programmi scritti nel linguaggio macchina
• Le istruzioni scritte in linguaggio macchina
possono essere lette, decodificate, ed eseguite
direttamente dal processore
.cpp e .exe
• Il programma scritto in C++ prende si chiama
anche codice sorgente, e il nome del file ha la
tipica estesione .cpp (ad es.: prova.cpp)
• Il codice sorgente viene compilato e, se tutto
va bene, viene creato il corrispondente codice
eseguibile, con estensione .exe (ad es.:
prova.exe)
• Il codice eseguibile è pronto per essere
eseguito dal calcolatore
codice sorgente
…
for (i=0;i<10;i++){
v[i]++;
}
…
prova.cpp
Compilatore C++
codice eseguibile
…
000101010101011
101010101111010
…
prova.exe
La compilazione
• Il processo di compilazione consiste di 3 tipi
diversi di analisi
• L’analisi lessicale controlla che siano usate parole
corrette del linguaggio di programmazione (ad
es.: for , if , ofr )
• L’analisi sintattica controlla che le istruzioni siano
costruite in maniera corretta (ad es.
for(i=0;i<10;i++) , (i=0; for) )
• L’analisi semantica analizza il significato delle
istruzioni (ad es.: “x = x+5;” = “prendi x e
aggiornalo sommando 5”)
Limiti della compilazione
• Il programmatore deve fare attenzione
• Il successo delle suddette tre analisi non è
garanzia del buon funzionamento del
programma
• Un programma scritto correttamente in C++
può non rispettare le specifiche perché il
programmatore ha scritto un codice che
differisce da quanto ha intenzione di realizzare
Un esempio di programma
#include <iostream>
using namespace std;
int main(){
cout << “Hello, world!\n”;
“cout” è un comando di output che
return 0;
consta di un insieme di sottocomandi
che devono essere eseguti dal
}
calcolatore perché si completi
l’operazione di output.
I comandi che costituiscono “cout” sono
definiti nella libreria “iostream”, che
deve essere inclusa nel programma
affinché il compilatore comprenda il
significato di “cout”
Il linker
• Il compilatore, per completare il suo compito,
fa ricorso a un altro programma, chiamato
linker
• Il linker connette il main a tutte le librerie
incluse al suo interno, in modo da creare un
unico eseguibile in cui siano presenti le
definizioni di tutti comandi utilizzati nel main
Compilatori e interpreti
• La distinzione tra compilatori e interpreti è la
seguente
• Un compilatore analizza l’intero codice
sorgente e poi produce un eseguibile
• Un interprete analizza, traduce e fa eseguire al
calcolatore una istruzione per volta
• Nell’ambito del C++ si hanno solo compilatori,
mentre per altri linguaggi di programmazione
(come ad es. Java) esistono degli interpreti
Scarica

Informatica 5