Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

11

04.05.2007, 22:18

Zitat von »"Deviloper"«


Ball.h

C-/C++-Quelltext

1
2
3
4
5
6
#if !defined(BALL_H__INCLUDED)
#define BALL_H__INCLUDED

#if (_MSC_VER > 1000)
    #pragma once
#endif // _MSC_VER > 1000
...


Das hat mich schon immer mal interessiert. Wieso moppelt man alles doppelt? :-|
@D13_Dreinig

12

04.05.2007, 22:19

Hmm weil #pragma once so wie man es mir mal erklärt hat vom VC++ noch besser genutzt werden kann weil er dann einfach die gesamte Datei raushaut, in der das steht. Aber bin mir nicht 100%ig sicher ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

13

04.05.2007, 22:24

Sehr logisch. Visual C++ profitiert von #pragma once weil der Präprozessor nicht eingesetzt wird. Aber grundlegend machen beide Formen das selbe. GCC profitiert wiederrum vom #ifndef xyz Weg. Aber warum man nun beides machen soll is mir nich klar. Beim doppelten inkludieren des Headers kommt der Compiler doch sowiso nichtmehr dazu #pragma once auszuwerten?!
@D13_Dreinig

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

14

04.05.2007, 22:30

Wenn mans umdreht machts vllt Sinn. Bei wirklich riesigen Projekten könnte das compiletime sparen ^^ Obwohl ich net glaube, das das so ins Gewicht fällt.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

15

04.05.2007, 22:35

Zitat von »"Das Gurke"«

Wenn mans umdreht machts vllt Sinn. Bei wirklich riesigen Projekten könnte das compiletime sparen ^^ Obwohl ich net glaube, das das so ins Gewicht fällt.


Ne, ich hab das schon öfters so gesehen. Nur hab ich den Sinn noch nicht begriffen, anscheinend. Es würde Sinn machen wenn Compiler mit #pragma once Unterstützung noch vor dem Präcompiler alle once's abklappern.

grüße
@D13_Dreinig

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

16

04.05.2007, 22:38

Stimmt, des ist ja auch nur ein weiteres Präprozessormakro, wird also garnicht wann anders aufgelöst. Dann erschliesst sich mir der Sinn auch nicht.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

17

04.05.2007, 22:53

Gut, ich hab des Rätsels Lösung:

Zitat


"#pragma once" is just an optimization issue. If a file is included a second time in the same TU, a dumb compiler will re-open it and give it to the preprocessor who strips its contents entirely because the include guard is already defined. Re-opening + preprocessing takes little but significant time.

With the "#pragma once" the programmer just gives an hint to the compiler that re-opening is unnecessary and ignores the #include directive immediately. You see, there *is* a speed gain even in the presence of canonical include guards.

Of course, a smarter compiler like g++ will recognize the canonical include guards and deduce that re-opening is unnecessary without any explicit hint given by the programmer.


Bei einem vorhandenen #pragma once wird also schon beim #include abgebrochen und die Datei erst garnicht geöffnet. Das erklärt nun einiges! ;)
@D13_Dreinig

Frogy

Frischling

  • »Frogy« ist der Autor dieses Themas

Beiträge: 43

Wohnort: Weimar

Beruf: Schüler (Klasse 9; Spezi)

  • Private Nachricht senden

18

05.05.2007, 10:28

Danke (auch an Deviloper ;) ) aber das zeug klappt trotzdem nicht :( .

Ob mit oder ohne #pragma once.
Fortune, fame
Mirror, vain
Gone insane
But the memory remains

Metallica

Frogy

Frischling

  • »Frogy« ist der Autor dieses Themas

Beiträge: 43

Wohnort: Weimar

Beruf: Schüler (Klasse 9; Spezi)

  • Private Nachricht senden

19

05.05.2007, 11:27

Gut jetzt gehts :) . Diveloper, du hattest in deinem, natürlich viel besseren Code ;) , bei einer Initialisierung die Klammer vergessen. VC++ hat ne riesige, unverständliche Fehlermeldung draus gemacht.

Nochmal Danke an alle!
Fortune, fame
Mirror, vain
Gone insane
But the memory remains

Metallica

Werbeanzeige