Ist es eine gute Idee, all Ihre Includes in eine Header-Datei zu schreiben?

7

Was ist die beste Vorgehensweise für C, was Sie in eine C-Header-Datei einfügen?

Ist es sinnvoll, alle Includes, die für ein Programm verwendet werden, auf mehrere Quelldateien in einer Header-Datei zu verteilen?

Was ist mit Includes, die in praktisch jeder Datei verwendet werden (d. h. stdio.h)?

    
danpker 28.02.2011, 04:42
quelle

7 Antworten

11

Nein. Es fügt einfach cruft und Overhead hinzu.

Einer der größten Probleme, denen Sie als Betreuer gegenüberstehen, ist herauszufinden, welche Header nicht enthalten sein müssen, um sie zu entfernen. Wenn du zu einer Liste mit über 20 Titeln kommst, fängst du an über hässliche Dinge nachzudenken

Sei nett zu Leuten, die deine Sachen in Zukunft pflegen müssen. Verwenden Sie die Header, die Sie pro Modul benötigen, nicht mehr .. nicht weniger:)

    
Tim Post 28.02.2011, 04:47
quelle
3

Ich persönlich unterschreibe eine Philosophie, "wo du es verwendest". Es macht es viel klarer, welche Dateien was verwenden, wo Abhängigkeiten sind, etc.

Stellen Sie sich vor Sie haben eine Kopfzeile MyHeader.h . Wenn Sie eine Änderung daran vornehmen, die das Ändern von Code erfordert, der davon abhängt, ist es einfach, diesen abhängigen Code zu finden, wenn jede Datei, die ihn verwendet, ein #include "MyHeader.h" hat - Sie können einfach eine globale Suche nach der include-Anweisung durchführen.

Wenn Sie andererseits MyHeader.h nur in eine andere Kopfzeile MyHugeHeader.h einfügen und dann das in Ihre Dateien einschließen, können Sie nicht dasselbe tun, da alles in den Dateien enthalten ist Das MyHeader.h ist #include "MyHugeHeader.h" , genauso wie jede andere Datei.

    
Mac 28.02.2011 04:46
quelle
3

Das Einfügen aller möglichen Header in einen Anwendungsheader ist so falsch wie falsch.

Das ist Faulheit, die zu einem guten Preis kommt. Es macht Builds spröde. Es macht es schwer zu verstehen, wo echte Abhängigkeiten sind, und ist daher schwer zu refactorieren oder Code anderweitig zu verwenden.

Es macht es schwierig zu testen.

Aber das größte Problem ist, dass es intellektuelle Faulheit darstellt und mehr davon fördert.

Wie bei allen Programmierproblemen tun Sie, was benötigt wird, nicht mehr und nicht weniger. Denken Sie über Wartung nach. Denken Sie über Build-Management nach.

Nur denken.

    
emvee 18.09.2011 00:20
quelle
1

Persönliche Präferenz wirklich ... Es spielt keine Rolle, wie formatiert wird, solange Sie konsistent sind (was das Lesen erleichtert). Sie könnten alles in 1 Header-Datei oder Sie können es einfach in jede Datei, die es braucht. Es hängt auch davon ab, wie andere Includes geladen werden, alles was nach dem main kommt, braucht seine Includes nicht und so weiter, also die gleiche Header-Datei für ALLE anderen C-Dateien zu verwenden oder nicht (hängt vom Compiler ab) mal.

Edit: Ich muss Mac auch zustimmen, es dort zu platzieren, wo du es benutzt, ist auch eine sehr, sehr schöne Sache

    
das7002 28.02.2011 04:47
quelle
1

Einige Dinge, auf die noch nicht hingewiesen wurde:

  • unnötige Abhängigkeiten erhöhen die Kompilierzeit. Wenn Sie eine Kopfzeile ändern, müssen Sie alle Kompilierungseinheiten neu kompilieren, die sie direkt oder indirekt enthalten. Wenn die Einfügung nicht benötigt wird, ist die Neukompilierung auch nicht. Je größer Ihr Programm ist, desto größer wird das Problem, besonders wenn Sie Ihre Programme in Composants aufgeteilt haben, deren Rekompilierung Sie manuell auslösen müssen.

  • Vor-Compiler-Header sind möglicherweise effizienter, wenn Sie nicht benötigte Abhängigkeiten hinzufügen.

AProgrammer 28.02.2011 06:18
quelle
1

Ich würde nicht absichtlich alle meine Includes in eine einzige Header-Datei einfügen, weil Sie, wenn Sie eine dieser Include-Header-Dateien ändern, alles neu kompilieren müssen, das Ihre "Master" -Include-Datei enthält. Dies kann zu unnötig langen Kompilierungszeiten für einen einzelnen Zeilenwechsel führen.

Das heißt, ich würde nicht zu viel Zeit darauf verwenden, dafür zu sorgen, dass ich nicht zu großzügig mit Include-Aussagen bin. Einige Entwickler werden viel Zeit darauf verwenden, die Anzahl der Includes zu reduzieren, um Zeit für die Kompilierung zu sparen, und ich denke, ihre Zeit ist besser, um Probleme zu lösen oder an neuen Funktionen zu arbeiten.

    
Jeff 28.02.2011 06:37
quelle
0

Eine Header-Datei ist eigentlich, was Sie aus Ihrem c-Programm einbeziehen. Es enthält Datenstrukturen wie Strukturen, Makros, Funktionsdefinitionen usw. Manchmal kann eine einzelne Header-Datei in Ordnung sein, kaufen Sie, wenn Ihr Programm in logische Komponenten wächst, benötigen Sie möglicherweise mehr.

    
Spyros 28.02.2011 04:44
quelle

Tags und Links