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?
c++
c
c-preprocessor
Asad Khan
quelle
quelle
#pragma
ist: Es aktiviert eine compilerspezifische Funktion. Obwohl#pragma once
es sehr weit verbreitet ist, ist es nicht Standard.info cpp
oder hier ) heißt es: "Sie wird nicht von allen Präprozessoren erkannt, sodass Sie sich in einem tragbaren Programm nicht darauf verlassen können." Und GNU cpp optimiert die gängige und tragbare Sprache#ifndef
so effizient wie möglich#pragma once
.#ifndef HEADERFILE_H
Kann subtiler den Namespace der Implementierung verletzen, mit dem der Headername anfängtE
; Bezeichner, die mitE
und eine Ziffer oder ein Großbuchstabe beginnen, sind vorbehalten<errno.h>
. Ich schlage vor#ifndef H_HEADERFILE
.Antworten:
Diese werden #include Wachen genannt .
Sobald der Header enthalten ist, wird geprüft, ob (in diesem Fall
HEADERFILE_H
) ein eindeutiger Wert definiert ist. Wenn es dann nicht definiert ist, definiert es es und fährt mit dem Rest der Seite fort.Wenn der Code erneut
ifndef
eingefügt wird, schlägt der erste fehl, was zu einer leeren Datei führt.Dies verhindert die doppelte Deklaration von Bezeichnern wie Typen, Aufzählungen und statischen Variablen.
quelle
#pragma once
die das gleiche tut :-)#pragma once
ist nicht tragbar; Die gebräuchliche#ifndef
Redewendung wird empfohlen.#ifndef
prüft, ob das angegebene Token#defined
früher in der Datei oder in einer enthaltenen Datei war; Wenn nicht, enthält es den Code zwischen ihm und der abschließenden#else
oder, falls keine#else
vorhanden ist,#endif
Anweisung.#ifndef
wird häufig verwendet, um Header-Dateien idempotent zu machen, indem ein Token definiert wird, sobald die Datei aufgenommen wurde, und überprüft wird, ob das Token nicht oben in dieser Datei festgelegt wurde.quelle
#ifndef H_HEADER_NAME
.Dies verhindert, dass dieselbe Header-Datei mehrfach mehrfach aufgenommen wird.
Angenommen, Sie haben diese Header-Datei in mehrere Dateien aufgenommen. Wenn __COMMON_H__ zum ersten Mal nicht definiert wird, wird es definiert und die Header-Datei eingeschlossen.
Das nächste Mal wird __COMMON_H__ definiert, sodass es nicht wieder aufgenommen wird.
quelle
Sie heißen ifdef oder beinhalten Wachen.
Wenn Sie ein kleines Programm schreiben, scheint es, dass es nicht benötigt wird, aber wenn das Projekt wächst, können Sie absichtlich oder unbeabsichtigt eine Datei mehrmals einfügen, was zu einer Kompilierungswarnung wie einer bereits deklarierten Variablen führen kann.
Wenn es nicht deklariert ist, was bedeutet, dass #ifndef true generiert, wird nur der Teil zwischen #ifndef und #endif ausgeführt, andernfalls nicht. Dies verhindert, dass die Bezeichner, Aufzählungen, Strukturen usw. erneut deklariert werden.
quelle