Korrigiert mich wenn ich Schwachsinn erzähle, aber #pragma once wurde ursprünglich von Microsoft eingeführt. Ob es mittlerweile zum Standard gehört, keine Ahnung. Zumindest "damals" war es so, dass #pragma once nicht unbedingt von jedem Compiler unterstützt wurde.
Der Vorteil von #pragma once ist, der Compiler kümmert sich darum dass die Datei nur ein mal Übersetzt/Eingebunden wird. Mit #define bastelt man sich so ein Verhalten ja selbst. Das Problem ist, hierbei kann es zu Namenskonflikten kommen. Dein Fall ist ein Beispiel dafür. Andererseits kann es auch passieren dass du eine Bibliothek nutzt und dort aus Versehen/Unwissen die selben Defines für deine Header benutzt. Zusätzlich kann es passieren dass sich Tippfehler einschleichen die du nicht bemerkst. Dadurch kann dann ungewolltes Verhalten entstehen was man erst mal wieder auf dieses Problem zurück führen muss.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
#ifndef TESTITEST
#define TESTTIEST
// Klassendefinition
#endif
|
Hier hat sich zum Beispiel ein Buchstabendreher eingeschlichen. Gibt unzählige Tippfehler die teilweise gar nicht so schnell auffallen. In dem Beispiel hier würde es zu Fehlverhalten kommen da die Includeguards nicht wirken.