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

Gandi

Frischling

  • »Gandi« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Bayern

Beruf: Elektrotechnikingenieur

  • Private Nachricht senden

1

21.06.2009, 16:10

[C++] Vor-/Nachteile mehrerer .cpp-Dateien

Grüß Gott,

es ist ja gängiger Stil, für jede Klasse eine .cpp-Datei und eine .h-Datei anzulegen. In die .h kommen die Deklarationen und in die .cpp's die Definitionen. In den .cpp's inkludiert man dann die nötigen .h's

Wenn man jetzt in Visual Studio das Projekt kompiliert, scheint bei jeder .cpp-Datei der ganze .h-Müll neu geparsed zu werden, wodurch der Kompiliervorgang ewig dauert... ich hab mir daher angewohnt, alle meine .cpp's in .cpp.h umzubenennen und dann nur eine .cpp-Datei zu erstellen, in der ich alle .cpp.h's einbinde. Funktioniert einwandfrei und der Kompiliervorgang dauert nur Sekunden.

Jetzt frag ich mich allerdings ob diese Methode irgendwelche Nachteile hat, denn ich hab sie noch nie bei irgendwelchen anderen Projekten gesehen. Es muss doch nen Grund geben wieso bei großen professionellen Projekten wie z.B. OGRE eine Kompilierzeit von ner halben Stunde in Kauf genommen wird, wo's doch viel schneller gehen könnte? Oder ist nur Visual Studio so ein Müll-Compiler, der alles doppelt parsed?

2

21.06.2009, 16:17

Für jede Klasse eine Datei?
Woher nimmst du die Weisheit, dass das gängiger Stil ist?

Ansonsten schau dir mal das Konzept der Vorkompilierten Header an.

Und in Visual Studio gibts eine Einstellung, die das Neucompilieren verhindert.
fka tm

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

3

21.06.2009, 16:20

Zitat von »"TrikkieMikkie"«

Für jede Klasse eine Datei?
Woher nimmst du die Weisheit, dass das gängiger Stil ist?

Es ist doch zumindest etwas, das sehr nahe liegt. Die allermeisten IDEs erstellen auch automatisch eine Klasse.h und eine Klasse.cpp, wenn man über irgendwelche grafischen Tools neue Klassen erstellt. Klar gibt es keinen triftigen Grund, sich akribisch daran zu halten, wie wie schon gesagt, es liegt doch zumindest nahe.
<< an dieser Stelle ist eine Signatur verstorben >>

4

21.06.2009, 16:35

Also ich habe in der Regel für jede Datei eine cpp und eine hpp (ich finde .hpp viel logischer, denn .c und .h sind ja noch von C).
Wenn du alles überall inkludierst erhöhst du eigentlich die Compilierzeit, wenn du eine Header änderst müssen dann ja sätmlich Dateien, die diese inkludieren ebenfalls neukompiliert werden. (Daher benutze ich wo möglich nur Forwarddeklarations).
Lieber dumm fragen, als dumm bleiben!

5

21.06.2009, 16:40

Nahe liegt für mich, Klassen nach Funktionalität in eine Datei zu packen.
Zum Beispiel Terrain.cpp/.h oder GUI.cpp/.h

Bisher ist mir auch noch kein (größeres) Projekt begegnet, welches dieses Konzept konsequent verfolgt hätte.
Kann mir auch nicht vorstellen, dass gestandene Softwareschmieden das so handhaben. Lasse mich aber gerne eines besseren belehren. ;)


Jonathan_Klein
Für jede Datei eine cpp und eine hpp?
fka tm

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

6

21.06.2009, 17:05

Re: [C++] Vor-/Nachteile mehrerer .cpp-Dateien

Zitat von »"Gandi"«

Jetzt frag ich mich allerdings ob diese Methode irgendwelche Nachteile hat, denn ich hab sie noch nie bei irgendwelchen anderen Projekten gesehen. Es muss doch nen Grund geben wieso bei großen professionellen Projekten wie z.B. OGRE eine Kompilierzeit von ner halben Stunde in Kauf genommen wird, wo's doch viel schneller gehen könnte? Oder ist nur Visual Studio so ein Müll-Compiler, der alles doppelt parsed?


Zum einen gibt es hierzu wie erwähnt vorkompilierte Header.

Zum anderen:
Bei OGRE wirst du auch wenn alles in einer einzigen cpp Datei eingebunden wird viele Minuten kompilieren müssen.

Der große Nachteil ist: Änderst du etwas an einer einzigen Klasse muss so das ganze Programm neu kompiliert werden. Bei mehreren cpp Dateien muss da nur die eine einzige cpp Datei kompiliert werden.

Das Verarbeiten von Header Dateien dauert nicht so lang, das was wirklich zeitaufwändig ist ist das Kompilieren von Implementierungen. Und wenn du dann nach einer kleinen Änderung nur 500 Zeilen Implementierung neu kompilieren musst statt 50.000 dann bist du um die Zeitersparnis mehr als froh :D

Gandi

Frischling

  • »Gandi« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Bayern

Beruf: Elektrotechnikingenieur

  • Private Nachricht senden

7

21.06.2009, 17:11

Zitat

Bisher ist mir auch noch kein (größeres) Projekt begegnet, welches dieses Konzept konsequent verfolgt hätte.
Kann mir auch nicht vorstellen, dass gestandene Softwareschmieden das so handhaben. Lasse mich aber gerne eines besseren belehren. Wink


Klar, kleine Hilfs-Klassen kann man dann auch noch dazupacken, aber bei größeren Klassen hab ich das Konzept schon desöfteren gesehen.

Zitat

Der große Nachteil ist: Änderst du etwas an einer einzigen Klasse muss so das ganze Programm neu kompiliert werden. Bei mehreren cpp Dateien muss da nur die eine einzige cpp Datei kompiliert werden.


Ah, das klingt natürlich einleuchtend. Damit hat sich dann wohl meine Frage geklärt^^

8

21.06.2009, 23:52

Zitat von »"TrikkieMikkie"«

Für jede Klasse eine Datei?
Woher nimmst du die Weisheit, dass das gängiger Stil ist?
Ich bin auch der Meinung, dass man mit dieser Faustregel grundsätzlich recht gut fährt. Mehrere grössere Klassen in einer Datei bringt keinen wirklichen Vorteil. Die ganze Übersetzungseinheit muss neu kompiliert werden, wenn man nur eine Implementierung ändert. Genauso muss der Header mit allen Klassendefinitionen eingebunden werden, obwohl lediglich eine benötigt wird.

Klar ist das wie gesagt eher eine Richtlinie. Bei fertigen Bibliotheken, die man nicht neu kompilieren muss, ist das auch wieder etwas anders. Aber ich persönlich habe mir angewöhnt, für meine Projekte für jede eigentliche Klasse eine .cpp- und .hpp-Datei anzulegen. Eventuell kommen da noch kleine Hilfsklassen, freie Funktionen oder Enums dazu.

Abgesehen von der Kompilierzeit hat die Auftrennung noch einen weiteren Vorteil: Modularisierung. Man kann seine Funktionalität spezifischer gliedern, wodurch die einzelnen Dateien auch schön schlank und übersichtlich bleiben.

9

22.06.2009, 09:17

Ist ja alles schön und gut. Beantworten kann mir die Frage aber keiner?
Gängig - Faustregel - Richtlinien...
Wo steht denn sowas?
Habe ich bei Stroustrup was verpasst?
fka tm

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

10

22.06.2009, 13:37

nö, dass nimmt man so aus der Luft auf...

Werbeanzeige