Scrivere e compilare programmi 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 … 000101010101011101010101111010 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”; return 0; } “cout” è un comando di output che 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