Informatica 2 Liceo Scientifico Scienze Applicate/Compilare un programma

Indice del libro

Compilare i Programmi

modifica

Un programma e' una serie di comandi che, se eseguiti dal computer, permettono di risolvere un problema o di far muovere il braccio di un robot. Il computer e' in grado di eseguire comandi in linguaggio macchina compatibili con la CPU utilizzata. I comandi in linguaggio macchina sono lunghe sequenze binarie del tipo 00001010101001010100000011111000 che risultano facili da leggere per il computer ma ostiche per il programmatore perché basta invertire per sbaglio anche un solo bit della sequenza per impartire un comando diverso da quello voluto. Nel linguaggio C i comandi sono del tipo if (a>5) b=34; una specie di inglese povero e molto matematico. Per far eseguire le istruzioni dal computer abbiamo bisogno di convertire i comandi espressi nel linguaggio C nel linguaggio macchina del computer e, questa traduzione e' svolta da particolari programmi chiamati compilatori, nel nostro caso il compilatore usato è GCC, ovvero quello usato da Dev-C++.
Il compilatore GCC e' anche quello adottato ufficialmente nelle Olimpiadi dell'Informatica.

 
schema per la compilazione di un file in C

Per la creazione di un programma eseguibile (i file che su Microsoft Windows hanno estensione .EXE o .COM) ci sono due passaggi principali.

  • Tramite un TEXT EDITOR si scrive il programma in C e lo si salva come file codificato in ASCII, ma invece di usare l'estensione dei file .TXT si usa l'estensione .C che e' convenzionalmente quella dei file scritti in linguaggio C. Un text editor e' un programma per la scrittura del testo (come Notepad).
    Cosa vuol dire che un file e' codificato in ASCII? Significa che le lettere che abbiamo digitato sulla tastiera sono state scritte ciascuna come un numero binario a 8 bit, ad esempio se abbiamo scritto la lettera A maiuscola questa e' diventata la sequenza binaria 01000001 (che nel sistema decimale equivale al numero 65), se si premeva B la codifica diventava 01000010 (numero 66). Notate anche che la sequenza numerica che descrive le lettere dell'alfabeto e' crescente (65, 66 ecc.), come pure quella delle lettere minuscole (97, 98, ecc). La tabella ASCII stabilisce la corrispondenza fra le lettere e le codifiche binarie, e spesso questa tabella viene ampliata scrivendo anche l'equivalente numero decimale o esadecimale della sequenzaq binaria.

 
In questa tabella ASCII non compaiono le sequenze binarie ma solo i corrispondenti numeri decimali ottali e esadecimali. Nota che se scrivi CIAO in pratica hai scritto 4 numeri: 67 73 65 79. Se ora aggiugi 32 ad ogni numero ottieni 99 105 97 111, cioe' la parola ciao. In sostanza per trasformare un testo tutto maiuscolo in minuscolo o viceversa, basta aggiungere o togliere 32 alla codifica di ciascuna lettera. Un carattere (char) e' memorizzato come un numero intero che puo' assumere valori fra 0 e 255 cioe' fra la sequenza binaria 00000000 e 11111111. Un carattere nel linguaggio C e' gestito internamente come un intero, e solo in fase di decodifica di quella sequenza binaria il numero 65 viene visualizzato come 65 o come A.

  • La compilazione converte le istruzioni in C in istruzioni macchina e le salva in un file con estensione .OBJ. Questo non e' ancora il file eseguibile, infatti i programmi sono spesso dati dall'unione del vostro file .OBJ con altri file .OBJ esterni che avete scelto indirettamente specificando delle particolari librerie scritte nelle prime righe del vostro file di testo, del tipo #include graphic.h. Questi altri file .OBJ possono essere stati scritti da voi o da altri programmatori che possono averli anche scritti inizialmente con linguaggi diversi dal C e poi compilati in .OBJ. L'unione dei diversi file .OBJ avviene mediante un programma chiamato Linker, il cui scopo e' quello di unire tutti i file .OBJ e trasformarli finalmente nel file .EXE.

Mentre con un compilatore a riga di comando i due ordini di compilazione e di link sono separati, nel Dev C++ per comodita' sono richiamati in rapida successione tramite un unico tasto (nella configurazione del DevC++ potete trovare il comando di link impartico e aggiungere anche delle opzioni o specificare i file OBJ da aggiungere).