Esercitazioni del corso di Laboratorio di Calcolo I
     n. 2
    4 e 8 ottobre 2002
    uso di emacs, del precompilatore e del compilatore g++



  1. 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.
  2. 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.
  3. creare il sottodirettorio ex2 (usando il comando mkdir)
  4. spostarsi in ex2 (usando il comando cd)
  5. 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)

  6. 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 ~
  7. 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.
  8. usare emacs per creare il file prova2.cc contenente il programma per il calcolo del voto (trasparenze fascicolo 6 pag.17 o 25)
  9. 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 .
  10. 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/
  11. 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 ).
  12. 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.
  13. 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).
  14. per eseguire il programma e` sufficiente scrivere il nome dell'eseguibile.