I denne artikkelen, grunnen til å bruke #ifndef og #definere Header -vakter i koden din blir diskutert.
Hvorfor brukes #IFNDEF og #Define i C ++ overskriftsfiler
I C ++, #ifdef og #definere brukes som en instruksjon for kompilatoren for å beskytte/beskytte flere bruk av overskriftsfiler. Av den grunn kalles de også headervakter. Det er en spesifikk syntaks som må følges for å bruke #ifndef og #definere. Så syntaksen er det når som helst #ifndef brukes, brukeren er også pålagt å avslutte den ved å bruke #slutt om og mellom disse kan alle erklæringer eller overskriftsfiler legges til:
Syntaks
#ifndef file_hI C ++ kode, #ifndef og #definere Identifiser og forhindrer innredning av klasser, enums, statiske variabler eller andre identifikatorer. Dette er nyttig i scenarier der flere klasser/funksjoner opprettes og blir kalt i programmer. Fordi mange ganger skjer det når en kompleks kode med flere klasser og objekter er designet og utviklerne har en tendens til å gjenta visse identifikatorer i forskjellige filer. La oss for eksempel anta at en bruker har laget to korrelerte filer i.e fil1.h og a File2.h og har inkludert fil1.h i fil2.H og omvendt.
Ved å gjøre dette oppstår en repetisjon som forårsaker rekursivitet. For å unngå denne rekursiviteten hvis brukeren legger til #ifndef og #definere overskriftsfiler, da vil disse overskriftene instruere kompilatoren for å forhindre denne rekursiviteten.
Hva er rekursivitet i en kode og hvordan “#ifndef” og “#definere” Hjelp med rekursivitet
Rekursivitet refererer til evnen til en funksjon til å bli inkludert flere ganger i en kildekode. Å ha rekursivitet i en kode vil generere forskjellige typer kompilasjonsfeil, for eksempel flere definisjoner, omdefinering av symboler og mer. For å forhindre denne rekursiviteten bruker vi “#Ifndef” og "#definere" headervakter.
La oss følge opp med et eksempel på hvordan “#Ifndef” og "#definere" forhindrer rekursivitet i en kode. Anta at det er en overskriftsfil “x.h ” som inkluderer overskriftsfilen "y.h ”, og den andre hodefilen "y.h ” inkluderer "x.h ”. Dette kalles rekursiv inkludering, og det vil skape feil når du kompilerer koden. For å forhindre dette kan vi bruke #ifndef og #definere i x.h og y.h følgende:
Overskriftsfilen x.h er gitt nedenfor:
#ifndef x_hOverskriftsfilen y.h er gitt nedenfor:
#ifndef y_hHer, X_h og Y_h er unike symboler definert av #definere. Den første gangen x.h er inkludert, X_h vil ikke bli definert, så forbehandleren vil definere den og inkludere y.h. Når y.h er inkludert, Y_h vil ikke bli definert, så forbehandleren vil definere den og inkludere x.h en gang til. Imidlertid denne gangen, A_h vil bli definert, så forbehandleren vil hoppe over inkluderingen av x.h.
På denne måten forhindres den rekursive inkluderingen og programmet kan samles uten feil.
Konklusjon
De #ifndef og #definere er kjent som headervakter for C ++ som brukes til å forhindre/beskytte rekursivitet eller repetisjon av identifikatorer. Overskriftsvaktene brukes til forbehandling, og det er grunnen til at de brukes inne i .H -filer (header) filer og ikke i hoved- .CPP (kompilibel) fil. Syntaks og bruk av overskriftsvakten er diskutert i ovennevnte retningslinjer.