Hvorfor brukes #IFNDEF og #Define i C ++ overskriftsfiler

Hvorfor brukes #IFNDEF og #Define i C ++ overskriftsfiler
C ++ -kodene kan bli lange noen ganger, og repetisjon av visse erklæringer eller funksjoner kan oppstå. Å ha flere funksjoner med lignende navn genererer en feil under kodeutførelsen og unnlater å gi brukerne ønsket utgang. For å forhindre at denne typen feil har gjentatte identifikatorer som funksjoner, klasse eller variabler, Headervakter brukes, som er #ifndef og #definere. Dette er C ++ derivater som forhindrer at innholdet i en overskriftsfil blir brukt flere ganger. Disse vaktene sikrer at innholdet i en overskriftsfil brukes en gang i en fil.

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_h
#Define file_h
// Deklarasjonskode
#slutt om

I 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_h
#Define X_H
#include "y.h "
// gjenværende overskriftsfilinnhold
#slutt om

Overskriftsfilen y.h er gitt nedenfor:

#ifndef y_h
#Define Y_H
#include "x.h "
// gjenværende overskriftsfilinnhold
#slutt om

Her, 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.