#pragma ANSI-konform?
-
Naja, ich wollte damit nur feststellen, dass das neue Studio 2005 statt der alten
#if !define HEADER_H #define HEADER_H ... #endif HEADER_Haus VS6 nun mit der
#pragma once-Direktive arbeitet, wenn man automatisch eine Klasse erstellt. Dass heißt wieder ein Schritt weg von der Konformität zu ANSI. Deswegen habe ich gefragt. Würde bedeuten: Noch mehr Arbeit, weil man sie nach Erstellen von Klassen auf IFDEF portieren muss.
-
Wenn ich mich richtig erinnere gibts in den C++0x Vorschlägen auch #pragma once.
Eine Frage an die g++ Fraktion: kann der g++ bzw. gcc mittlerweile nicht auch #pragma once?
Übrigens benutze ich nur noch #pragma once, da mir der #ifndef Quatsch ziemlich auf den Senkel geht. Und Standard hin oder her, der gcc hat auch Erweiterungen die nicht im Standard drin stehen.
-
VS verbietet keine Include-Guards sondern fügt sie nur nicht mehr automatisch ein wenn man sich ein Gerüst für eine Klasse generieren lässt. Wo ist also das Problem? Die Dinger kann man in ein paar Sekunden selber ergänzen wenn man sie braucht. Schöner wäre natürlich ein Auswahlhäkchen gewesen...
Aber kennt mittlerweile nicht sogar der GNU-Compiler das once-Pragma?
-
Artchi schrieb:
Übrigens benutze ich nur noch #pragma once, da mir der #ifndef Quatsch ziemlich auf den Senkel geht.
Jup, mach ich auch. Meine Quellen auf der Arbeit werden sowieso in überabsehbarer Zeit nur mit dem MS-Compiler übersetzt.
-
viele programmierer machens so
#ifndef HEADER_H #define HEADER_H #pragma once #endif //HEADER_Hda bist du auf der sicheren seite.
wenn der compiler den befehl hinter #pragma nicht kennt, dann hat er die #pragma-anweisung zu ignorieren. so sagts der standard.theoretisch gibts in c++ neben #include auch noch #import. die #import-direktive included den header in jedem falle nur einmal. so, als würde sie mit #include und #pragma once included werden. allerdings benutzt #import kein schwein.
-
Das ist ja noch häßlicher. Manche fragen auch ab ob die Compiler-Version für #pragma once reicht. Sind wir also schon bei 6 Zeilen Präprozessor-Geraffel. Ich glaube ich schreibe mir einen Prä-Präprozessor der die Dinger automatisch einfügt, dann habe ich endlich Ruhe mit dem Mist
.
-
Konfusius schrieb:
allerdings benutzt #import kein schwein.
Warum nicht? Läuft das irgendwo nicht?
PS: Ich habe nicht gesagt, das VS die INCLUDES verbietet, nur das er sie nicht mehr automatisch einfügt.
-
Walli schrieb:
Das ist ja noch häßlicher. Manche fragen auch ab ob die Compiler-Version für #pragma once reicht. Sind wir also schon bei 6 Zeilen Präprozessor-Geraffel. Ich glaube ich schreibe mir einen Prä-Präprozessor der die Dinger automatisch einfügt, dann habe ich endlich Ruhe mit dem Mist
.Die Frage habe ich mir schon lange gestellt, warum die Präprozessoren sich nicht einfach selbst merken, welche Datei sie schon mal includiert haben?
Übrigens, Boost arbeitet an Wave, einem Präprozessor der endlich Schluss machen soll, mit den inkompatibilitäten.
-
Artchi schrieb:
Die Frage habe ich mir schon lange gestellt, warum die Präprozessoren sich nicht einfach selbst merken, welche Datei sie schon mal includiert haben?
Weil es durchaus passieren kann, daß jemand ABSICHTLICH einen Header doppelt einbindet (der z.B. je nach Vorbedingungen die Deklarationen oder die Definitionen deiner globalen Variablen bereitstellt).
-
CStoll (off) schrieb:
Artchi schrieb:
Die Frage habe ich mir schon lange gestellt, warum die Präprozessoren sich nicht einfach selbst merken, welche Datei sie schon mal includiert haben?
Weil es durchaus passieren kann, daß jemand ABSICHTLICH einen Header doppelt einbindet (der z.B. je nach Vorbedingungen die Deklarationen oder die Definitionen deiner globalen Variablen bereitstellt).
Das passiert so selten, dass ein pragma für die Fälle wo absichtlich doppelt eingebunden wird sinnvoller gewesen wäre.
-
Hab ich mir auch so gedacht. Wäre sinnvoller explizit anzugeben, das er es includieren muß. Macht sogar logisch mehr Sinn.