DEIS - Università di Bologna - L I A - Laboratorio d'Informatica Avanzata


Progetti in RHIDE 1.4


Introduzione

Il concetto di progetto e' essenziale per poter lavorare in RHIDE, anche per poter compilare ed eseguire il piu' semplice dei programmi.

In estrema sintesi, un progetto e' una sorta di contenitore, che elenca i file C che fanno parte, appunto, di uno stesso progetto di lavoro. Nel caso piu' semplice, il progetto comprende un solo file, ma la sua utilita' si apprezza in particolare quando una applicazione e' costruita a partire da piu' files, che devono essere compilati e poi collegati insieme per dare luogo all'applicazione eseguibile finale.

L'ambiente RHIDE (come quasi tutti gli ambienti commerciali) sfrutta il concetto di progetto per gestire, nell'ambito del processo di costruzione di un'applicazione (make), la fase di collegamento (linking).
Infatti, mentre la fase di compilazione di un file sorgente riguarda il singolo file, la successiva fase di collegamento richiede, per definizione, di conoscere e avere disponibili tutti i file da collegare (incluse le librerie di sistema, anche se non esplicitamente indicate).
In questo ambito il progetto, elencando i file che fanno parte di uno stesso progetto di lavoro, costituisce un "contenitore logico" ideale.

RHIDE e i progetti

Appena avviato, RHIDE mostra una finestra vuota. Per iniziare a lavorare, la cosa migliore e' aprire un nuovo progetto. Per fare questo, basta scegliere la voce Apri dal menu' Progetto, e immettere un nome di progetto nuovo (cioe' non gia' utilizzato). Il nome deve avere l'estensione .gpr, ad esempio prova.gpr:

Ora occorre inserire nel progetto il file (o i file) che ne devono fare parte (non e' necessario che esistano gia'). Per aggiungere file al progetto, basta premere il tasto INS sulla tastiera, e selezionare (o digitare i nomi, per i file nuovi) i file da aggiungere, premendo OK volta per volta. A immissione terminata, premere cancel (annulla). Ad esempio, per aggiungere al progetto il file prova.c:

Fatto questo, il nome del file prova.c sara' listato nella finestra del progetto. Per aprire l'editor su quel file (per modificarlo se gia' esiste, o creare se inesistente) basta ora un doppio clic sul nome del file.

E' quindi possibile scrivere / modificare il file sorgente, avendo cura di salvarlo a intervalli regolari (si puo' usare allo scopo il tasto F2).

Compilazione ed esecuzione del programma

Quando il file e' pronto per la compilazione, scegliere Compila dall'omonimo menu': RHIDE mostrera' i comandi usati per invocare il compilatore GCC e le relative opzioni. Al termine, se non ci sono errori, si potra' passare alla fase di collegamento (linking).

IN ALTERNATIVA, le due fasi compilazione + collegamento possono essere svolte automaticamente da RHIDE, in sequenza, scegliendo la voce Make (costruisci) dal menu' Compile.

In assenza di errori di linking, il programma cosi' ottenuto e' pronto per l'esecuzione. Per eseguirlo, basta scegliere Run dal menu' omonimo, o digitare CTRL+F9: i risultati saranno osservabili nella finestra di uscita, visualizzabile o premendo ALT+F5 o scegliendo la voce User Screen dal menu' Windows. In entrambi i casi, un qualsiasi tasto riporta poi a RHIDE.

NOTA: al termine dell'esecuzione, l'ambiente visualizza una finestra informativa che mostra il "codice di ritorno" del programma. Questo e' semplicemente il valore restituito dalla funzione main() quando e' definita di tipo int, e ha significato solo quando il programma e' stato progettato per farne uso. Se, viceversa, main() e' stata dichiarata di tipo void, il valore mostrato e' casuale, e deve essere ignorato.

Alla fine, chiudere il progetto mediante l'apposita voce del menu' Project.

Esecuzione passo-passo del programma

Se il programma, pur compilandosi ed essendo possibile eseguirlo, non si comporta nel modo atteso, e' spesso molto utile poterne seguire il comportamento passo-passo, tenendo anche d'occhio, contemporaneamente, come evolvono le variabili piu' significative.

Tutto questo processo di analisi, noto come debugging, puo' essere eseguito interamente all'interno di RHIDE. Per fare questo, il programma deve essere gia' stato preventivamente costruito (compilato e collegato) senza errori.

Per eseguirlo passo passo (o in altro modo "controllato") sono disponibili vari comandi entro il menu' Run:

Da notare che l'esecuzione passo-passo opera per righe: quindi, a ogni pressione di F7/F8 verranno eseguite tutte le istruzioni sulla stessa riga, e si passera' poi alla riga successiva. La prossima riga da eseguire e' evidenziata in azzurro. In conseguenza di questo modo di procedere, l'evidenziazione azzurra saltera' sistematicamente le righe contenenti commenti, o comunque non associabili ad almeno una istruzione.

Quindi, ad esempio, eseguendo passo-passo il nostro programma di prova (premendo F7), la riga azzurra si portera' sulla riga della printf(); ripremendo F7, la printf() verra' eseguita, e la riga azzurra si portera' sulla parentesi graffa di chiusura. Una ulteriore pressione di F7 causera' l'uscita dal programma e la conseguente scomparsa della riga azzurra.
NOTA: se, a ogni pressione di F7, si preme ALT+F5 per verificare cosa accade nella finestra di uscita, si potra' constatare come la scritta "ciao mondo" venga in effetti emessa alla fine del programma. Cio' e' dovuto al fatto che la stringa di formato di printf() non comprende il carattere di "a capo", \n, e quindi i caratteri stampati restano nel buffer di uscita fino a quando il termine del programma non ne forza la stampa. Se il programma venisse modificato cambiando la printf("ciao mondo") in printf("ciao mondo\n"), la stampa apparirebbe in uscita subito dopo l'esecuzione della riga contenente la printf().

Al termine del programma, per rieseguirlo da capo occorre prima "resettarlo", cioe' riportare concettualmente all'inizio il contatore di programma che indica la prossima istruzione da eseguire.
Cio' puo' essere fatto scegliendo l'apposita voce nel menu' Run (o premendo CTRL+F2).

Osservazione delle variabili del programma

Durante l'esecuzione passo-passo, spesso e' necessario poter seguire l'evoluzione delle principali variabili del programma. Per fare questo, esse devono prima essere "messe sotto osservazione", tramite il concetto di watch. Questa opzione e' disponibile, insieme a varie altre, sotto il menu' Debug.

Scegliendo questa opzione (o premendo l'equivalente combinazione CTRL+F7), apparira' una finestrina che chiedera' di introdurre l'espressione da "tenere d'occhio". Solitamente, tale espressione sara' semplicemente il nome di una variabile. Nel nostro esempio, non essendoci variabili, cio' e' inutile: ma in altri casi e' di estrema utilita'. Si veda ad esempio il seguente programma modificato:

Questa opzione e' molto utile anche per comprendere bene il significato di ambito di visibilita' di una variabile.

Le altre opzioni del menu' Debug consentono rispettivamente: