Diskussion:C++-Programmierung/ Weitere Grundelemente/ Headerdateien
Letzter Kommentar: vor 9 Jahren von KABOOOM001
Chfreund hatte bei „Schutz vor Mehrfacheinbindung“ folgendes eingefügt:
Viele Compiler implementieren eine weitere Präprozessoranweisung um genau dieses Verhalten automatisiert zu erzeugen. Setzen von #pragma once
an den Anfang der Headerdatei bewirkt das gleiche, wie der hier beschriebene #ifndef-Header-Guard.
Da das kein Standard ist, hab ich's entfernt. Für alle die es interessiert bleibt's aber hier stehen. ;-) (Ich persönlich rate von der Verwendung ab!) Gruß --Prog 19:25, 12. Sep. 2009 (CEST)
- Pffff :-(( ... hierzu muss ich aber jetzt ein wenig flamen: das ist schneller und wird unterstützt von gcc, msvc, mars, metrowerks, comeau, watcom, intel und borland ab irgendeiner Version. Hast Du eine Vorstellung davon was das für ein Gewitter im Präprozessor ist, wenn man -nicht- #pragma once nimmt? Pragma once ist ein Segen für die Compiler-Geschwindigkeit! Der gcc/g++ hatte das mal auf deprecated und dann ganz raus, jetzt ist es wieder drin, weil sich viele tausende Leute beschwert hatten. Wenn Du hier angeführt hättest, dass bei riesigen Libs mit der Gefahr der Mehrfachverwendung gleicher Header aus verschiedenen Dateipfaden (worüber in 99% der Fälle schon ein übler Murksgeruch schwebt) der langsame header-guard besser ist, weil er benannt ist, hätte ich es wenigstens zum Teil verstanden. Wusstest Du das libs wie boost in einem ifdef-konstrukt untersuchen ob ein compiler pragma-once (nicht) hat, damit sie innerhalb ihrer libs nach möglichkeit pragma once verwenden? Schau Dir auch mal die diskussionen hierzu in comp.std.c++ an. Natürlich muss man bei portierbarem Code sowas wie die bei boost machen. Sehe ich alles ein. Eine Revision der eingebrachten Texte find ich gut, aber zum Rauslöschen war das hier nicht reif. Da ich Dir die Meinungshoheit zugestehe, da Du der Hauptautor bist, soll es eben so sein. Gut find ich es aber nicht. --cf 18:54, 19. Sep. 2009 (CEST)
- Hi cf, das pragma once auch in Boost verwendet wird, wusste ich tatsächlich noch nicht. Dennoch wird es auch in Boost nur für den MSVC (und kompatible Compiler) genutzt und solange es nicht im C++-Standard steht, ist es meines Erachtens nach nicht sinnvoll, ein pragma einzusetzen das dermaßen weitreichende Folgen hat. Ich hoffe immer noch darauf, dass das alte include-Konzept von C in einem späteren Standard endlich durch ein moderneres ersetzt/ergänzt wird, wie beispielsweise Java es bietet. Den Mehrfach-include-Schutz mit Hilfe von once auf eine neue Ebene zu heben, bringt aber meiner Meinung nach mehr Probleme mit sich, als es löst und der Geschwindigkeitsvorteil beim Compilieren dürfte gegen 0 gehen, sobald man Templates verwendet. Ich hab leider noch keine Geschwindigkeitsvergleiche der beiden Techniken gesehen, falls du (oder irgendwer anders) welche hast, würde ich mir die gerne mal ansehen, um das ganze besser beurteilen zu können. Gruß --Prog 14:57, 23. Mai 2010 (CEST)
--KABOOOM001 13:50, 25. Feb. 2015 (CET) KABOOOM001 hat nur was kleines korrigiert. #ifdef-Header-Guard -> #ifndef-Header-Guard Liebe Grüsse 25.02.2015 13:50