Avatar ·

#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 once als "sauberere" Lösung angesehen?
  • Kann #pragma once zu Fehlern führen, wenn die Datei kopiert wurde oder sich in verschiedenen Ordnern befindet?
  • Was schreibt