inkludieren und kompilieren

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

inkludieren und kompilieren

Beitrag von starcow »

Abend zusammen :-)

Ich meine, ich konnte wiedermal bisschen was lernen - bei einem Thema, bei den ich mich eher etwas schwer tue: Inkludieren und kompilieren.
Bislang hatte ich diese Sache so gehalten, dass ich in das eigentliche .cpp File jeweils ausschliesslich das dazugehörige Header-File inkludiert habe.
Im Header wiederum inkludierte ich dann sämtliche Headers, die ich benötigte. Das schien mir irgendwie übersichtlich. Doch leider musste ich merken, dass dieser Ansatz zu nichts führt.
Nach einigen Hinweisen von euch, hat es mir dann allmählich gedämmert.
Das Header File dient ja quasi als Schnittstelle nach aussen hin und sollte folglich auch nur das nötigste enthalten (wenn ich euch richtig verstanden habe).
Nun habe ich versucht diesem Gedanken zu entsprechen und alle Dinge, die tatsächlich erst in den eigentlichen Methoden der .cpp benötigt werden, auch erst in dieser Datei zu inkludieren!
Ich bin dann so weit gegangen, dass ich in den Header-Files Vorwärtsdeklarationen verwendet habe, soweit dies möglich war (also bei Deklarationen von Pointern). Und dies obschon ich dann im entsprechenden .cpp File den ganzen Header des selben Typs inkludiert habe (resp. inkludieren musste).
Meine Überlegung dazu war, dass ich in den Header-Files so wenig Inkludierungen haben sollte, wie nur irgendwie möglich. Um zu verhindern, dass grosse "Rattenschwänze" entstehen (im Sinne von: include ... -> include ... -> include ...).
Meine Frage an euch: Macht man das so? Ist dieser Ansatz sinnvoll? Oder zäume ich da einmal mehr das Pferd von hinten auf? (-:

Gruss und schönen Abend, starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Jonathan
Establishment
Beiträge: 2353
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: inkludieren und kompilieren

Beitrag von Jonathan »

Jo, möglichst wenig inkludieren ist ansich immer besser. Wenn ein Header einen anderen inkludiert den er nicht zwingend benötigt dauert halt das Kompillieren sämtlicher Dateien die diesen Header inkludieren länger.

[edit]Hab den Artikel nur überflogen, sieht aber ganz ok aus:
https://upcoder.com/20/cc-include-guidelines
[/edit]
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: inkludieren und kompilieren

Beitrag von starcow »

Sehr gute Übersicht, vielen Dank!
Hab ich jetzt das richtig verstanden, dass man das mit den entsprechenden Vorwärtsdeklarationen in den Header-Files durchaus so macht?

Gruss starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Jonathan
Establishment
Beiträge: 2353
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: inkludieren und kompilieren

Beitrag von Jonathan »

Ja, wann immer man eine Vorwärtsdeklaration anstatt eines Header-Includes verwenden kann, sollte man das tun. Das verkürzt Kompilierzeiten und verhindert Konflikte mit zyklischen Includes.

Es gibt auch dieses "Include what you use"-Tool, welches halbwegs automatisch prüft, ob deine Includes so ok sind:

https://github.com/include-what-you-use ... WhyIWYU.md

Ist bei größeren Projekten nicht unbedingt super einfach ans Laufen zu kriegen, aber es ist auch schon sehr interessant zu lesen, welche Richtlinien die für Includes benutzen.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Antworten