Esercitazioni del corso
di Laboratorio di Calcolo I
n. 2
4 e 8 ottobre 2002
uso di emacs, del precompilatore e del compilatore
g++
-
copiare (usando il comando cp) da /home/docente
i file .bashrc e .profile: sono stati modificati per fornirvi nel prompt
il path del direttorio corrente (ed aiutarvi quindi a non "perdervi"
quando vi spostate nel filesystem) e per cercare i programmi da eseguire
anche nel direttorio corrente e non solo nei direttori di sistema . Date
logout e entrate nuovamente.
-
copiare da /home/docente il file .emacs
che
contiene la configurazione di emacs. In questo file vengono assegnate le
"face" da usare ovvero i caratteri e colori utilizzati per rappresentare
le diverse istruzioni del programma. Questo passaggio non e` indispensabile
ma vedrete che i colori vi aiuteranno.
-
creare il sottodirettorio ex2 (usando il comando mkdir)
-
spostarsi in ex2 (usando il comando cd)
-
usare emacs per creare il file prova1.cc contenente l'esempio
a pag.4 del fascicolo 7 delle trasparenze (emacs prova1.cc, inserire
l'esempio, salvare con Save Buffer dal menu File oppure con C-x C-s)
NB: le tastiere italiane (che prevedono caratteri speciali
come le lettere accentate) non prevedono caratteri quali { } e ~ che vi
serviranno spesso. Utilizzate
AltGr insieme al tasto 7 per {
AltGr insieme al tasto 0 per }
AltGr insieme al tasto ^ per ~
-
invocare il precompilatore, ovvero dare il comando g++
-E prova1.cc : come potete
vedere l'uscita di questo comando e` inviata direttamente allo schermo.
Potete osservare che il precompilatore ha sostituito al simbolo SCALA
il valore da voi definito nella direttiva #define.
-
usare emacs per creare il file prova2.cc contenente il programma
per il calcolo del voto (trasparenze fascicolo
6 pag.17 o 25)
-
invocare il precompilatore, ovvero dare il comando g++
-E prova2.cc : come potete
vedere l'uscita di questo comando e` inviata direttamente allo schermo,
per poter visualizzare il codice precompilato avete bisogno di ridirigere
questa
informazione su un file. Questa operazione si effettua in unix mediante
il comando > .
Provate quindi a dare il comando g++
-E prova2.cc >
preprova2.cc
.
-
aprite il file preprova2.cc con more:
more preprova2.cc .
Potete osservare che il precompilatore ha inserito, oltre a molte righe
vuote, tantissimo codice in cima al vostro programma: si tratta di una
copia del file iostream.h che definisce le classi di oggetti che gestiscono
l'Input/Output (ed in particolare gli oggetti cin e cout). Potete verificarlo
andando ad aprire, sempre con more, il file iostream.h
che si trova in un direttorio del sistema: /usr/include/g++-3/
-
a questo punto, ora che sapete come
agisce il precompilatore, potete passare al compilatore vero e proprio.
Potete invocarlo sia partendo dal file da precompilare che partendo dal
file precompilato con i comandi g++
-S prova2.cc e
g++
-S preprova2.cc e potete
verificare che si ottiene lo stesso file assembly in uscita (lo potete
guardare com more e potete confrontare due file con il comando unix diff
file1 file2 ).
-
dopo la compilazione avete bisogno
dell'assembler, che si invoca col comando g++
-c nomefile e
che puo` agire su uno qualunque dei files che avete creato fino ad ora
(prova2.cc,preprova2.cc,prova2.s,preprova2.s) e che produce nomefile.o.
Il comando more vi consente di sbirciare anche dentro a questo file senza
far danni, ma come potete vedere e` scritto in un formato non visualizzabile.
-
per ottenere un eseguibile invece dovete
invocare g++,
di nuovo su uno qualunque dei files precedenti, senza opzioni (o solo con
l'opzione -o nomeeseguibile
se volete dare un nome diverso da a.out al vostro eseguibile).
-
per eseguire il programma e` sufficiente
scrivere il nome dell'eseguibile.