W języku C++, jaki jest cel ochrony nagłówka w programie C++.Cel osłon nagłówka
Z sieci wynika, że zapobiega ponownemu włączaniu plików, ale w jaki sposób gwarantuje to osłona nagłówka.
W języku C++, jaki jest cel ochrony nagłówka w programie C++.Cel osłon nagłówka
Z sieci wynika, że zapobiega ponownemu włączaniu plików, ale w jaki sposób gwarantuje to osłona nagłówka.
Nagłówek strażnika ma zapobiegać problemom, jeśli plik nagłówkowy jest zawarty więcej niż jeden raz; na przykład
#ifndef MARKER
#define MARKER
// declarations
#endif
Po raz pierwszy ten plik jest #include
-ed, symbol MARKER
preprocesor będą niezdefiniowane, więc preprocesor zdefiniuje symbol oraz następujące deklaracje zawarte w kodzie źródłowym widziana przez kompilator. W następnym symbolu #include
zostanie zdefiniowany symbol MARKER
, a zatem wszystko w obrębie obiektu #ifnde
/#endif
zostanie usunięte przez preprocesor.
Aby to działało poprawnie, symbol MARKER
musi być inny dla każdego pliku nagłówkowego, który może być #include
-ed.
Powodem tego rodzaju rzeczy jest to, że jest to nielegalne w C/C++, aby zdefiniować typ lub funkcję o tej samej nazwie więcej niż jeden raz w jednostce kompilacji. Strażnik zezwala na pliki nagłówkowe na #include
innych plików nagłówkowych bez obawy, że może to powodować wielokrotne dołączanie niektórych deklaracji.
W skrócie, to nie uniemożliwia pochodzisz #include
znowu i znowu -ing pliku. Raczej pozwala zrobić to bez powodowania błędów kompilacji.
Celem osłon nagłówka jest zapobieganie problemom, w których niektóre kody mogą pojawić się tylko jeden raz na jednostkę tłumaczeniową.
Jednym z przykładów jest struktura. Nie można przedefiniować struktury, nawet jeśli druga definicja jest identyczna. Tak więc, jeśli próbujesz skompilować następujące:
struct foo { int x; };
struct foo { int x; };
Kompilator zakończy się niepowodzeniem z powodu ponownego zdefiniowania.
Może być trudno zagwarantować, że nagłówek zostanie dołączony tylko raz (dzieje się tak, gdy nagłówki zawierają inne nagłówki). Jeśli twój nagłówek ma definicję struktury, spowoduje to awarię kompilacji. Nagłówki są łatwą lewą, więc nawet jeśli nagłówek jest dołączany wiele razy, zawartość pojawia się tylko jeden raz.
Przyjęty termin na to w C++ to "należy do strażnika". –
Wikipedia podaje [bardzo dobre wytłumaczenie] (http://en.wikipedia.org/wiki/Include_guard) na temat tego, jak działają strażnicy. –