Include guard: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Funzionalità collegamenti suggeriti: 1 collegamento inserito. |
|||
(15 versioni intermedie di 11 utenti non mostrate) | |||
Riga 1:
{{F|
Nei linguaggi [[C (linguaggio)|C]] e [[C++]], le #'''include guard''' sono delle particolari direttive (o [[Macro (informatica)|macro]]) che vengono usate nei file header per evitare problemi di
== Esempio ==
=== <
<
class persona
{
// dichiarazione
};
</syntaxhighlight>
=== <
<
#include
class impiegato : public persona
Riga 23:
// dichiarazione
};
</syntaxhighlight>
=== <
<
#include
#include
int main()
Riga 36:
impiegato i;
}
</syntaxhighlight>
== Compilazione ==
In fase di compilazione, verrà creato un file oggetto: main.o Gli header files vengono inclusi nel file sorgente main.cpp ovvero il loro contenuto viene copiato dal [[preprocessore]] all'inizio del file main.cpp prima della 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à
Per non avere questo tipo di problema basta utilizzare le #include guard in questa maniera:
=== <
<
#ifndef PERSONA_H
#define PERSONA_H
Riga 57 ⟶ 54:
#endif // PERSONA_H
</syntaxhighlight>
Con questo
Di buona norma le #include guard devono essere inserite in tutti i file <
==#pragma once==
La seguente è un'alternativa equivalente agli include guard ma più breve e più semplice e a volte incrementa la velocità di compilazione.
=== <kbd>persona.h</kbd> ===
<syntaxhighlight lang="Cpp">
#pragma once
//tutto il resto
</syntaxhighlight>
Indica che il file deve essere incluso una sola volta nella compilazione.
===Portabilità===
Nonostante questa direttiva non sia definita negli standard del C/C++, è definita in quasi tutti i compilatori.
{| class="wikitable sortable"
|-
! Compiler
! #pragma once
|-
| [[Clang]] || Supportato
|-
| [[Comeau C/C++]] || Supportato
|-
| [[C++Builder XE3]] || Supportato
|-
| [[Digital Mars C++]] || Supportato
|-
| [[GNU Compiler Collection|GCC]] || Supportato
|-
| [[HP aC++|HP C/aC++]] || Supportato
|-
| [[IBM XL C++|IBM XL C/C++]] || Supportato
|-
| [[Intel C++ Compiler]] || Supportato
|-
| [[Microsoft Visual C++]] || Supportato
|-
| [[Pelles C]] || Supportato
|-
| [[ARM DS-5]] || Supportato
|-
| [[IAR C/C++]] || Supportato
|-
| [[Oracle Solaris Studio|Solaris Studio C/C++]] || Non supportato
|}
{{C++}}
[[Categoria:C++]]▼
{{portale|informatica}}
[[Categoria:C]]
▲[[Categoria:C++]]
|