2010-06-05 5 views
8

In C++ quale è lo scopo della protezione dell'intestazione nel programma C++.Scopo delle protezioni dell'intestazione

Dalla rete ho scoperto che è per prevenire l'inclusione di file ancora e ancora, ma come garantire la protezione dell'intestazione.

+0

Il termine accettato per questo in C++ è "include guard". –

+0

Wikipedia fornisce [una spiegazione molto buona] (http://en.wikipedia.org/wiki/Include_guard) di come funzionano le guardie incluse. –

risposta

14

L'intestazione di protezione impedisce problemi se il file di intestazione è incluso più di una volta; per esempio.

#ifndef MARKER 
#define MARKER 
// declarations 
#endif 

La prima volta che questo file è #include -ed, il simbolo MARKER preprocessore sarà indefinito, in modo che il preprocessore definirà il simbolo, e le seguenti dichiarazioni saranno inclusi nel codice sorgente visto dal compilatore. Nei successivi #include, verrà definito il simbolo MARKER e quindi tutto all'interno di #ifnde/#endif verrà rimosso dal preprocessore.

Per fare in modo che funzioni correttamente, il simbolo MARKER deve essere diverso per ogni file di intestazione che potrebbe essere #include -ed.

Il motivo per cui questo tipo di cosa è necessario è che in C/C++ è illegale definire un tipo o una funzione con lo stesso nome più di una volta in un'unità di compilazione. La guardia consente un file di intestazione agli altri file di intestazione #include senza preoccuparsi che questo potrebbe causare l'inclusione di alcune dichiarazioni più volte.


In breve, non impedisce voi dal #include -ing nuovo e di nuovo un file. Piuttosto, è che consente a di eseguire questo senza causare errori di compilazione.

2

Lo scopo delle protezioni intestazione è quello di prevenire problemi in cui alcuni codici possono apparire solo una volta per unità di traduzione.

Un esempio è una struttura. Non è possibile ridefinire una struttura anche se la seconda definizione è identica. Quindi, se si tenta di compilare quanto segue:

struct foo { int x; }; 
struct foo { int x; }; 

Il compilatore non riuscirà a causa della ridefinizione.

Può essere difficile garantire di includere un'intestazione una sola volta (ciò accade quando le intestazioni includono altre intestazioni). Se l'intestazione ha una definizione di struct, ciò comporterà il fallimento della compilazione. Le protezioni di intestazione sono il trucco facile in modo che anche se un'intestazione è inclusa più volte, i contenuti appaiono solo una volta sola.

Problemi correlati