Waarom worden #ifndef en #define gebruikt in C++-headerbestanden?

Ik zie dergelijke code meestal aan het begin van headerbestanden:

#ifndef HEADERFILE_H
#define HEADERFILE_H

En aan het einde van het bestand staat

#endif

Wat is het doel hiervan?


Antwoord 1, autoriteit 100%

Die worden #include bewakersgenoemd.

Zodra de header is opgenomen, wordt gecontroleerd of een unieke waarde (in dit geval HEADERFILE_H) is gedefinieerd. Als het dan niet is gedefinieerd, definieert het het en gaat het verder naar de rest van de pagina.

Als de code opnieuw wordt toegevoegd, mislukt de eerste ifndef, wat resulteert in een leeg bestand.

Dat voorkomt dubbele declaratie van ID’s zoals typen, opsommingen en statische variabelen.


Antwoord 2, autoriteit 8%

#ifndef <token>
/* code */
#else
/* code to include if the token is defined */
#endif

#ifndefcontroleert of het gegeven token eerder in het bestand of in een bijgevoegd bestand #definedis; zo niet, dan bevat het de code ertussen en de afsluitende #elseof, als er geen #elseaanwezig is, de #endif-instructie. #ifndefwordt vaak gebruikt om header-bestanden idempotent te maken door een token te definiëren zodra het bestand is opgenomen en te controleren of het token niet bovenaan dat bestand is ingesteld.

#ifndef _INCL_GUARD
#define _INCL_GUARD
#endif

Antwoord 3, autoriteit 3%

Dit voorkomt dat hetzelfde headerbestand meerdere keren wordt opgenomen.

#ifndef __COMMON_H__
#define __COMMON_H__
//header file content
#endif

Stel dat je dit headerbestand in meerdere bestanden hebt opgenomen. Dus de eerste keer
__COMMON_H__ is niet gedefinieerd, het wordt gedefinieerd en het headerbestand wordt opgenomen.

De volgende keer dat __COMMON_H__ wordt gedefinieerd, wordt het niet opnieuw opgenomen.


Antwoord 4

Ze worden ifdef genoemd of bevatten bewakers.

Als je een klein programma schrijft, lijkt het misschien niet nodig, maar naarmate het project groeit, kun je opzettelijk of onopzettelijk een bestand meerdere keren opnemen, wat kan resulteren in een compilatiewaarschuwing zoals een reeds gedeclareerde variabele.

#ifndef checks whether HEADERFILE_H is not declared.
#define will declare HEADERFILE_H once #ifndef generates true.
#endif is to know the scope of #ifndef i.e end of #ifndef

Als het niet is gedeclareerd, wat betekent dat #ifndef true genereert, wordt alleen het gedeelte tussen #ifndef en #endif uitgevoerd, anders niet. Dit voorkomt dat de identifiers, opsommingen, structuur, enz. opnieuw worden gedeclareerd…

Other episodes