Include guard: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Errore riguardo alla generazione dei file oggetto. Gli header file non vengono compilati in file oggetto differenti ma semplicemente inclusi in main.cpp prima della compilazione. |
Funzionalità collegamenti suggeriti: 1 collegamento inserito. |
||
(8 versioni intermedie di 5 utenti non mostrate) | |||
Riga 5:
Supponiamo di avere 3 file sorgenti senza #include guard:
=== <
<
class persona
{
// dichiarazione
};
</syntaxhighlight>
=== <
<
#include "persona.h"
Riga 23:
// dichiarazione
};
</syntaxhighlight>
=== <
<
#include "persona.h"
#include "impiegato.h"
Riga 36:
impiegato i;
}
</syntaxhighlight>
== Compilazione ==
In fase di compilazione,
Senza interessarci delle implementazioni di persona e impiegato, il nostro obiettivo sarà quello di usare indistintamente una persona o un impiegato (ed i relativi metodi). Quando il linker andrà a creare l'eseguibile definitivo, avrà una doppia dichiarazione di persona e rilascerà un errore di linkaggio. Infatti la classe persona sarà definita sia nel file <
Per non avere questo tipo di problema basta utilizzare le #include guard in questa maniera:
=== <
<
#ifndef PERSONA_H
#define PERSONA_H
Riga 54:
#endif // PERSONA_H
</syntaxhighlight>
Con questo
Di buona norma le #include guard devono essere inserite in tutti i file <
==#pragma once==
Riga 64:
La seguente è un'alternativa equivalente agli include guard ma più breve e più semplice e a volte incrementa la velocità di compilazione.
=== <
<
#pragma once
//tutto il resto
</syntaxhighlight>
Indica che il file deve essere incluso una sola volta nella compilazione.
|