La programmazione in Linux: GCC | ALTRI capitoli | |||
GCC, oggi, è un acronimo per "GNU Compiler Collection": una collezione di compilatori per differenti linguaggi di programmazione, quali C, C++, Objective-C, Objective-C++, Java, Fortran, Ada, Go. In realtà, GCC, alla sua nascita, stava per: "GNU C Compiler". Oggi, i compilatori GCC per linguaggi di programmazione diversi da C hanno nomi differenti: GNAT ( Ada ), G++ ( C++ ), GCJ ( Java ) e così via, mentre GCC resta il compilatore per C. Per vedere GCC all'opera, prendiamo un file sorgente classico di esempio,
Per compilare questo semplice programma, utilizzando
Questa semplice riga salverà il file eseguibile, compilato da
Questa riga salverà il file eseguibile, compilato da
Questa riga salverà il file eseguibile, compilato da
dove
E' anche possibile compilare singolarmente i diversi file che compongono un programma, creando dei file intermedi, gli object file, che, poi, andranno collegati ( linked ) l'uno all'altro. Per creare un object file, usare l'opzione
Questo comando produce un object file chiamato
Senza l'opzione
In fase di linking, l'opzione
Come dire al compilatore
oppure, è possibile utilizzare l'opzione
I due comandi sono equivalenti: entrambi compileranno il file "
La libreria del nostro esempio, " Un header file è un file, nel linguaggio C, con estensione
del preprocessore C. Per esempio:
Questa sintassi viene usata per gli header file di sistema, che verranno cercati all'interno delle directory standard di sistema, normalmente la directory:
Esistono due tipi di header file: quelli compresi nel compilatore (header file di sistema) e quelli scritti dal programmatore. Questi ultimi vengono cercati nella directory corrente:
Includere un header file equivale a copiarne il contenuto. Per esempio, avendo un header file di nome
ed un programma
il preprocessore passarebbe al compilatore il programma
Se un header file venisse incluso, erroneamente, due volte nel file, il compilatore lo inserirebbe due volte, generando un errore. Per prevenire tutto ciò, è sufficiente inserire un IF:
Il preprocessore C (CPP o C Preprocessor) è la prima fase del processo di compilazione. In termini semplici, il preprocessore C è uno strumento di sostituzione di quelle parti del testo contenuto nel programma che istruiscono il compilatore su cosa fare prima della vera e propria compilazione. Tutte le direttive destinate al preprocessore iniziano con un cancelletto:
Devono essere all'inizio del file (il cancelletto deve essere il primo carattere non bianco presente nel file) e devono iniziare nella prima colonna di ciascuna riga. Le direttive sono:
che sostituisce una macro. Una macro è un frammento di codice cui è stato assegnato un nome. Ovunque si trovi quel nome, il nome viene sostituito dal contenuto della macro. Quindi, il seguente input per il preprocessore C:
diventa:
Quando il preprocessore espande un nome di una macro, l'espansione sostituisce l'invocazione della macro (il nome); in seguito, l'espansione viene a sua volta esaminata, in cerca di altre macro da espandere. Per esempio:
TABLESIZE viene inizialmente espansa in BUFSIZE, poi BUFSIZE viene, a sua volta, espansa per produrre il risultato finale: 1024. Se l'espansione di una macro contiene lo stesso nome della macro, direttamente o indirettamente, l'ulteriore espansione non viene eseguita, così da evitare le recursioni infinite. Esistono due tipi di macro:
che inserisce un header copiato da un altro file;
che annulla la definizione di una macro;
che restituisce TRUE se la macro è definita;
che restituisce TRUE se la macro NON è definita;
|
||||
La programmazione in Linux: GCC | Le guide di .bit: contenuto originale |