Direttive #Include e #Define
Parliamo di direttive.
Parliamo precisamente delle due direttive include e define.
Una direttiva fornisce un comando al preprocessore.
Questo comando è preceduto, per essere riconosciuto come direttiva, dal carattere hash.
Le due direttive che prenderemo in considerazione sono include e define.
La direttiva include prevede un parametro compreso tra i simboli maggiore e minore oppure tra doppi apici, e questo parametro rappresenta il nome di un file.
Il preprocessore, cosa fa?
Cerca il file in una determinata dai directory, che viene definita all'interno della configurazione del sistema, ne copia contenuto senza interpretarlo nel file di testo del programma, e quindi compone un nuovo testo del programma, che è dato dall'unione del testo del programma più, appunto, il file che è andato a leggere attraverso la direttiva include.
Ed è poi questo risultato che viene passato al compilatore.
Se il nome del file è compreso tra i simboli maggiore e minore, la ricerca avviene all'interno della directory in cui si trovano tutti i file di intestazione della libreria standard, che ha una directory stabilita, normalmente, da configurazioni di sistema, per esempio, per Linux
o Unix, la directory normalmente è slash usr slash include.
Se, invece, il nome del file è compreso tra doppi apici, la ricerca avviene all'interno della directory in cui sta avvenendo la compilazione, quindi, la directory in cui si trova il file di testo contenente il codice C, se parliamo appunto di linguaggio C, oppure possiamo specificare, attraverso un'opportuna sintassi, altre directory a partire da quella in cui siamo, quindi sottodirectory oppure directory padre o, quindi, la gerarchia insomma, possiamo navigare all'interno della gerarchia delle directory.
Grazie al preprocessore, quindi, che cosa succede?
Il compilatore si deve trovare automaticamente le dichiarazioni di tutte le funzioni utilizzate all'interno del file sorgente, cioè noi definiamo un nuovo file sorgente unione di quello che abbiamo unito con la direttiva include e del programma che abbiamo scritto, e quindi può essere che abbiamo degli errori dovuti al mancato inserimento di tutti i file di intestazione necessari, sostanzialmente non tutto viene e non tutte le variabili che vengono usate sono state definite.
Quindi, in questo caso, nel caso in cui manchi qualcosa, avremo un errore del tipo implicit declaration of nome_funzione, cioè quella funzione non è stata dichiarata nel modo corretto, manca qualcosa, quindi bisogna fare attenzione a questo aspetto.
La direttiva, invece, define serve a introdurre una macro, cioè, ovvero, un simbolo.
Vediamo che cosa si intende.
Innanzitutto, partiamo dalla sintassi.
La sintassi è la seguente: hash define, nome della macro e il valore della macro.
I nomi delle macro sono sempre scritti con lettere maiuscole, e questo per convenzione.
Quindi, il preprocessore ogni volta che incontra nome della macro, sostituisce al simbolo il corrispondente valore, e non verifica la correttezza sintattica del risultato.
Cosa vuol dire?
Vuol dire che se io vado a dare le due direttive, include e std i o, quindi, standard input-output, quindi tutte le funzioni che sono in quel file, std i o punto h, vengono incluse all'interno del codice sorgente, e poi vado a dare un'altra direttiva, define ULTIMO 30, vediamo che all'interno del programma, cosa accade?
Accade che ho un ciclo da 0 a, fino a dove?
Fino a ULTIMO, cioè fino a 30 non compreso perché ad ULTIMO ho sostituito quello che ho dato nella definizione di macro ULTIMO, e quindi vado poi a stampare il numero i, cioè il numero che ho nel mio ciclo in quel momento, ed è il massimo valore, ed il massimo valore, invece, che posso raggiungere è 30, cioè ULTIMO.
Quindi, fondamentalmente, si tratta di definire di dare ad una variabile, ad una variabile, un valore che poi viene richiamato all'interno del programma, senza doverlo specificare ulteriormente.