Include paza

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În C și limbi C ++ , # includ gărzi sunt directive speciale (sau macro - uri ) , care sunt utilizate în fișiere antet pentru a evita problemele duble definiție în timpul conectării.

Exemplu

Să presupunem că avem 3 fișiere sursă fără #include guard:

persoana.h

 persoană de clasă
{
    // declarație
};

angajat.h

 #include "persona.h"

angajat de clasă : persoană publică
{
    // declarație
};

main.cpp

 #include "persona.h"
#includeți  angajat.h 

int main ()
{
    persoana p ;
    angajat i ;
}

Compilare

La compilare, va fi creat un fișier obiect: main.o Fișierele antet sunt incluse în fișierul sursă main.cpp, adică conținutul lor este copiat din preprocesor la începutul fișierului main.cpp înainte de compilare.

Indiferent de implementările persoanei și angajaților, obiectivul nostru va fi să folosim indiferent fie persoana, fie angajatul (și metodele acestora). Când linkerul creează executabilul final, acesta se va declara de două ori și va emite o eroare de legătură. De fapt , clasa persoană va fi definită atât în fișierul person.o și în fișierul employee.o. În acest din urmă caz, cel al fișierului utilizat.o , este necesar să se introducă declarația de persoană din cauza directivei #include specificate.

Pentru a evita acest tip de problemă, pur și simplu folosiți #include protecții de acest fel:

persoana.h

 #ifndef PERSONA_H
#define PERSONA_H

// toate celelalte

# endif // PERSONA_H

Cu acest truc, este inclusă prima dată persona.h , simbolul PERSONA_H nu a fost încă definit și, în consecință, este creat. Data viitoare când includeți persoana.h, PERSONA_H simbolul este definit, prin urmare, partea referitoare la definiția clasei de persoană nu este luată în considerare.

De regulă, protecțiile #include trebuie inserate în toate fișierele .h pentru a asigura o mai mare transparență programatorului evitând acest tip de eroare.

#pragma o dată

Următoarea este o alternativă echivalentă pentru a include gardieni, dar mai scurtă și mai simplă și uneori crește viteza de compilare.

persoana.h

 #pragma o dată

//toate celelalte

Indică faptul că fișierul ar trebui să fie inclus o singură dată în compilație.

Portabilitate

Deși această directivă nu este definită în standardele C / C ++, este definită în aproape toate compilatoarele.

Compilator #pragma o dată
Zăngăni Sprijinit
Comeau C / C ++ Sprijinit
C ++ Builder XE3 Sprijinit
Digital Mars C ++ Sprijinit
GCC Sprijinit
HP C / aC ++ Sprijinit
IBM XL C / C ++ Sprijinit
Compilator Intel C ++ Sprijinit
Microsoft Visual C ++ Sprijinit
Pelles C Sprijinit
ARM DS-5 Sprijinit
IAR C / C ++ Sprijinit
Solaris Studio C / C ++ Nu sunt acceptate
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT