Frage Was ist ein Guard-Block für eine Header-Datei in C ++?


Ich versuche, eine C ++ - Klasse mit der IDE Code :: Blocks zu machen, und es gibt ein Feld namens "Guard Block". Ich habe eine Suche durchgeführt und konnte keine nützlichen Informationen finden. Wozu dient dieses Feld? Vielen Dank.


5
2017-10-20 20:22


Ursprung


Antworten:


Guard-Blöcke werden verwendet, um vor der Aufnahme einer Header-Datei mehrere Male durch die gleiche Kompilierungseinheit (C ++ - Datei) zu schützen. Sie sehen ungefähr so ​​aus:

// Foo.h
#ifndef INCLUDE_FILE_NAME_HERE_H_
#define INCLUDE_FILE_NAME_HERE_H_

class Foo
{
};


#endif

Wenn Sie dieselbe Datei mit mehreren Dateien einschließen, erhalten Sie mehrere Definitionsfehler. Die Verwendung von Include-Wächtern ist in kleinen Projekten nicht erforderlich, wird jedoch bei mittelgroßen bis großen Projekten kritisch. Ich benutze es routinemäßig für alle Header-Dateien, die ich schreibe.


11
2017-10-20 20:28



Guard-Blöcke werden verwendet, um zu verhindern, dass eine Header-Datei mehrfach in einer einzelnen Übersetzungseinheit enthalten ist. Dies ist häufig ein Problem, wenn Sie eine Anzahl von Headerdateien einschließen, die wiederum gemeinsame Standardheaderdateien enthalten.

Das Problem mit mehreren Einschlüssen derselben Datei besteht darin, dass dasselbe Symbol mehrmals definiert wird.

Guard-Klauseln können mit behandelt werden #define und #ifdef Aussagen, aber sind viel einfacher mit dem Nicht-Standard, aber universell, #pragma once.

// foo.h
#pragma once

int foo(void);
// etc.

1
2017-10-20 20:34