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

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

1

12.01.2008, 19:41

#pragma once vs. #ifdef...

Hallo

Ich habe mich gefragt, wo die Unterschiede sind zwischen der pragma once Direktive und dem #ifdef.. Konstrukt?

Also Vor/Nachteile..

Als Vorteil für pragma kann ich nur nennen, dass es keine Namenskonflikte gibt/geben könnte, wie bei der #ifdef.. Anweisung.

Ansonsten sehe ich nicht, warum ich das eine oder andere einsetzen sollte.
Ich habe jetzt immer pragma once Direktive benutzt und das aus dem einen oben angeführten Grund.

Was meint ihr?

2

12.01.2008, 20:13

pragma once ist wesentlich performanter.
Da der Compiler sich merkt welche Dateien schonmal aufgerufen wurden und sie auch wenn man sie im Quelltext aufruft nicht mehr öffnet. Bei der ifdef Anweisung öffnet er die Dateien immer nochmal extra und prüft dann und verlässt sie wieder.
Dafür rennt pragma once nur auf Visual Studio von M$
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

12.01.2008, 20:39

Ahh. Ok.

Darum verwenden die meisten dennoch die #ifdef Anweisung... Habe mir ein paar Sources angesehen und ich habe nirgends #pragma once gefunden..
Und da es ja einfacher wäre und, wie du sagst performanter habe ich nicht verstanden, wieso es nicht so oft eingesetzt wird.

4

12.01.2008, 21:36

Vermutlich deshalb:

Zitat


Dafür rennt pragma once nur auf Visual Studio von M$
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

13.01.2008, 10:56

das stimmt nicht ganz. #pragma once funktioniert z.b. auf GCC auch, nur sollte man es dort nicht verwenden.

um portabel zu sein z.B. einfach so machen:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#if defined _MSC_VER && _MSC_VER >= 1020
#pragma once
#endif

#ifndef THREADING_H
#define THREADING_H

// eigentlicher header code


#endif  // THREADING_H

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

13.01.2008, 11:32

So rum ist das schöner! ;)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#ifndef THREADING_H
#define THREADING_H

#if defined _MSC_VER && _MSC_VER >= 1020
#pragma once
#endif

// eigentlicher header code


#endif  // THREADING_H
@D13_Dreinig

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

8

13.01.2008, 15:03

Zitat von »"Theprogrammer"«

pragma once ist wesentlich performanter.
Nur um das nochmal hervorzuheben: Es ist nicht performanter, sondern schneller beim kompilieren! Auf die Ausführungsgeschwindigkeit des Programms hat das keinen Einfluss!

9

13.01.2008, 18:59

Das meinte ich ja damit :p
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

Werbeanzeige