#pragma once vs. include guards: Was wählen, um doppelte Einbindung zu vermeiden?
Hallo zusammen! Ich bin ein Anfänger in C++ und bin bereits mehrmals auf das Problem der doppelten Einbindung von Header-Dateien gestoßen. Zum Beispiel habe ich diesen Code:
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b) { return a + b; }
#endif
// main.cpp
#include "math_utils.h"
#include "math_utils.h" // versehentlich zweimal eingebunden
int main() {
return add(2, 3);
}
Mit include guards funktioniert alles, aber ich habe bemerkt, dass viele moderne Projekte (z.B. aus Boost) #pragma once verwenden. Ich habe gelesen, dass dies eine nicht standardisierte Direktive ist, aber sie wird von allen wichtigen Compilern unterstützt.
Mich interessiert:
- Gibt es echte Performance-Probleme bei include guards?
- Warum wird
#pragma onceals "sauberere" Lösung angesehen? - Kann
#pragma oncezu Fehlern führen, wenn die Datei kopiert wurde oder sich in verschiedenen Ordnern befindet? - Was schreibt