it-swarm.com.de

Warum werden #ifndef und #define in C ++ - Headerdateien verwendet?

Ich habe Code wie diesen normalerweise am Anfang von Header-Dateien gesehen:

#ifndef HEADERFILE_H
#define HEADERFILE_H

Und am Ende der Datei steht

#endif

Was ist der Zweck davon?

441
Asad Khan

Diese heißen # include guards .

Sobald der Header enthalten ist, wird geprüft, ob ein eindeutiger Wert (in diesem Fall HEADERFILE_H) definiert ist. Wenn es nicht definiert ist, definiert es es und fährt mit dem Rest der Seite fort.

Wenn der Code erneut eingefügt wird, schlägt das erste ifndef fehl, was zu einer leeren Datei führt.

Dies verhindert die doppelte Deklaration von Bezeichnern wie Typen, Aufzählungen und statischen Variablen.

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

#ifndef prüft, ob das angegebene Token #defined früher in der Datei oder in einer eingeschlossenen Datei war; Ist dies nicht der Fall, enthält es den Code zwischen dem Code und der abschließenden Anweisung #else oder, falls keine Anweisung #else vorhanden ist, die Anweisung #endif. #ifndef wird häufig verwendet, um Header-Dateien zu idempotenten, indem ein Token definiert wird, sobald die Datei enthalten ist, und überprüft wird, ob das Token nicht oben in dieser Datei gesetzt wurde.

#ifndef _INCL_GUARD
#define _INCL_GUARD
#endif
29
Roy

Dies verhindert, dass dieselbe Header-Datei mehrmals eingefügt wird.

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

Angenommen, Sie haben diese Header-Datei in mehrere Dateien aufgenommen. Wenn __COMMON_H__ also zum ersten Mal nicht definiert wird, wird es definiert und die Header-Datei eingeschlossen.

Das nächste Mal wird __COMMON_H__ definiert, daher wird es nicht erneut einbezogen.

8
Sandeep_black