31.05.2013 Views

Tricky C - Si® @lbert Site

Tricky C - Si® @lbert Site

Tricky C - Si® @lbert Site

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

4 - <strong>Tricky</strong> C<br />

programma vero e proprio, direttamente eseguibile dal microprocessore con la sola intermediazione del<br />

sistema operativo.<br />

Per eseguire il programma, dunque, non servono né compilatore o linker, né, tantomeno, il file<br />

sorgente.<br />

I vantaggi rispetto all'interprete, in termini di velocità e semplicità di esecuzione, sono evidenti,<br />

a fronte di una maggiore complessità del ciclo di sviluppo. Infatti il compilatore, nel caso in cui rilevi<br />

errori nel sorgente, li segnala e non produce alcun object file. Il programmatore deve analizzare il<br />

sorgente, correggere gli errori e ritentare la compilazione: detta sequenza va ripetuta sino a quando, in<br />

assenza di segnalazioni d'errore da parte del compilatore, viene prodotto un object file pronto per<br />

l'operazione di linking. Anche in questa fase potranno verificarsi errori: il caso classico è quello della<br />

funzione esterna non trovata nella libreria. Anche questa volta occorre analizzare il sorgente, correggere<br />

l'errore (il nome della funzione potrebbe essere stato digitato in modo errato 5 ) e ripetere non solo il<br />

linking, ma anche la compilazione.<br />

Solo in assenza di errori tanto nella fase di compilazione quanto in quella di linking si può<br />

ottenere un file eseguibile; in altre parole: il programma funzionante 6 .<br />

Il C rientra a pieno titolo nella folta schiera dei linguaggi compilati (insieme a Cobol e Fortran,<br />

per fare un paio di esempi).<br />

Q u a l e d e i d u e ?<br />

Come si vede, sia il compilatore che l'interprete portano con sé vantaggi e svantaggi peculiari.<br />

Quale delle due tecniche utilizzare, allora?<br />

Al riguardo si può osservare che la finalità di un programma non è "essere sviluppato", ma<br />

servire "bene" allo scopo per il quale viene creato; in altre parole esso deve essere semplice da utilizzare<br />

e, soprattutto, efficiente. La scelta del compilatore è quindi d'obbligo per chi intenda realizzare<br />

applicazioni commerciali o, comunque, di un certo pregio.<br />

L'interprete si pone quale utile strumento didattico per i principianti: l'interattività nello sviluppo<br />

dei programmi facilita enormemente l'apprendimento del linguaggio.<br />

In molti casi, comunque, la scelta è obbligata: per quel che riguarda il C, non esistono in<br />

commercio interpreti in grado di offrire un valido supporto al programmatore, al di là dell'apprendimento<br />

dei primi rudimenti del linguaggio. L'utilizzo del compilatore è imprescindibile anche per la realizzazione<br />

di programmi semplici e "senza troppe pretese"; va osservato, in ogni caso, che compilatore e linker sono<br />

strumenti con i quali è possibile raggiungere elevati livelli di efficienza e produttività anche in fase di<br />

sviluppo, dopo un breve periodo di familiarizzazione.<br />

D A L L ' I D E A A L L ' A P P L I C A Z I O N E<br />

Vale la pena, a questo punto, di descrivere brevemente le varie fasi attraverso le quali l'idea<br />

diventa programma eseguibile, attraverso un sorgente C.<br />

In primo luogo occorre analizzare il problema e giungere alla definizione dell'algoritmo,<br />

scindendo il problema originale in sottoproblemi di minore complessità. Banale, si tratta dell'unico<br />

approccio valido indipendentemente dal linguaggio utilizzato...<br />

5 Un errore di tale genere non può essere individuato dal compilatore, proprio perché si tratta di una funzione<br />

esterna al linguaggio, e come tale sconosciuta al compilatore, il quale non può fare altro che segnalarne all'interno<br />

dell'object file il nome e il punto di chiamata e scaricare il barile al linker.<br />

6 Il fatto che il programma funzioni non significa che svolga bene il proprio compito: compilatore e linker non<br />

possono individuare errori nella logica del programma. Qui il termine "funzionante" va inteso in senso puramente<br />

tecnico.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!