PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : #pragma once


Gast
2008-01-23, 09:32:38
Visual Studio baut immer #pragma once statt der klassischen #ifndef Include Guards ein. Ich habe mich schon länger gefragt, ob man dies benutzen sollte bzw. warum? Vorallem auch wenn der Code portabel unter GCC und anderen Maschinen "mal laufen soll"?

Gast
2008-01-23, 09:40:19
Visual Studio baut immer #pragma once statt der klassischen #ifndef Include Guards ein. Ich habe mich schon länger gefragt, ob man dies benutzen sollte bzw. warum?
Weils es dem Präprozessore einer verständlich macht, dass es die Datei nicht mehr neu parsen muß, wenn sie mehr als einmal includiert wird.
Der GCC hat afaik inzwischen aber auch einen Mechanismus um das auch mit Guards zu erkennen.
Vorallem auch wenn der Code portabel unter GCC und anderen Maschinen "mal laufen soll"?
Läuft zumindest mit den Compilern für PS3, XBox und Wii (und der kann nichtmal Exceptions...). Eigentlich unterstützt das jeder moderne Compiler.

rotalever
2008-01-23, 14:31:15
Angeblich ist das schneller, weil der dann nicht bis zum Ende des Dokuments laufen muss und das #endif suchen muss.

Coda
2008-01-23, 22:17:27
Ich finde, dass #pragma once ruhig in den Standard könnte. Ich verwende für Windows-only-Projekte ausschließlich.

Ganon
2008-01-23, 22:27:48
Noch eleganter finde ich ja eher das #import von Objective-C. Das passt auch auf das es nur ein mal eingebunden ist :)

Von mir aus könnte man es so im C/C++-Standard bestimmen:

#include wenn doppeltes einfügen gewünscht ist und
#import wenn es nicht gewünscht ist. (nutze ich unter OS X generell)

Gast
2008-01-23, 22:48:14
Noch eleganter finde ich ja eher das #import von Objective-C. Das passt auch auf das es nur ein mal eingebunden ist :)

Von mir aus könnte man es so im C/C++-Standard bestimmen:

#include wenn doppeltes einfügen gewünscht ist und
#import wenn es nicht gewünscht ist. (nutze ich unter OS X generell)

Aber #pragma once ist hier effizienter, da man dort nicht mit mehreren Namen für Anweisungen in den Code Dateien rumhantieren muss (entwerder #include oder #import), sondern trägt das bei Bedarf in den entsprechenden Header oder lässt es eben weg.

Coda
2008-01-23, 22:54:26
Ist mir völlig egal, hautpsache keine #ifdefs mehr. Das empfand ich schon immer als unelegant.

MadMan2k
2008-01-23, 23:32:59
Angeblich ist das schneller, weil der dann nicht bis zum Ende des Dokuments laufen muss und das #endif suchen muss.
lol? sowas von egal...

Coda
2008-01-23, 23:35:58
Hier stand Blödsinn :)

rotalever
2008-01-24, 14:29:13
lol? sowas von egal...
müsste man an einem großen Projekt halt Benchmarken, dann sieht man, ob es was bringt.

Gast
2008-01-24, 17:40:54
Ist mir völlig egal, hautpsache keine #ifdefs mehr. Das empfand ich schon immer als unelegant.was mich bei den #ifdefs immer am meisten genervt hat, ist wenn man mal den Namen der Klasse/Headerdatei ändert. Dann läßt man entweder den Namen des defines beim alten, was aber, wenn man die Datei Jahre später nochmal anguckt, fremdartig anmutet, oder man muß sich die Arbeit machen, im #ifdef und im #define den Namen umzuändern, was nervig ist.

Helms
2008-01-29, 10:22:53
Mahlzeit,

ich möchte eine eigene Warning ausgeben. Dazu habe ich #pragma message("") gefunden, allerdings wird dies nur einmal beim Kompilieren ausgegeben.

Ich habe in einer Lib eine Komponente, wo ich sicherstellen will, daß der Anwender weiß, was er da gerade macht. Also eine Meldung wie wenn man von signed nach unsigned int o.ä. kopiert, also "Datenverlust beim Casten" ausgegeben wird. Ich möchte dies aber bei jeder Verwendung ausgegeben wissen mit Zeile des Aufrufs (am Besten wie bei anderen Warnings, so daß man in VS gleich zur Stelle springen kann).

Ist das irgendwie machbar? thx

Neomi
2008-01-29, 12:02:41
Ich möchte dies aber bei jeder Verwendung ausgegeben wissen mit Zeile des Aufrufs (am Besten wie bei anderen Warnings, so daß man in VS gleich zur Stelle springen kann).

Schau dir mal __declspec(deprecated) in der Doku an, eine so markierte Funktion wird bei jedem Aufruf angewarnt. Entspricht nicht ganz deiner Vorstellung, kommt aber noch am nächsten dran.

Gast
2008-01-29, 12:09:27
Ich hab irgendwo mal gelesen das das #pragma once sogar von den gcc Leuten vorgeschlagen wurde, und nicht von Microsoft erfunden wurde. Ob's stimmt weiß ich nicht.

Jedenfalls find ich das auch toll :)