Forum: PC-Programmierung Organisation von Header-Dateien


von Dennis S. (eltio)


Lesenswert?

Hallo zusammen,

ich habe ein Projekt mit ca. 15 selbstgeschriebenen Header-Dateien. 
Jede meiner Quellcode-Dateien beginnt etwa wie folgt:
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <stdint.h>
4
#include "globals.h"
5
#include "sort.h"
6
#include "statistics.h"

Wenn jetzt eine neue Header-Datei dazukommt muss ich jede .c-Datei 
öffnen und den Code oben ergänzen. Das ist offensichtlich sehr 
aufwendig.

Wie handhabt ihr das in euren Projekten?

Gruß
Dennis

von Peter II (Gast)


Lesenswert?

Dennis S. schrieb:
> Wenn jetzt eine neue Header-Datei dazukommt muss ich jede .c-Datei
> öffnen und den Code oben ergänzen. Das ist offensichtlich sehr
> aufwendig.

warum muss den eine neu Header datei in jeder C datei sein?

z.b. die sort.h musst du wirklihc in jeder C datei sortieren?

von Dumdi D. (dumdidum)


Lesenswert?

Mit 15 Headerdateien und wachsend scheint eher etwas schief zu laufen. 
Insbesondere das jede Datei auf alle Header zugreifen muss ist 
verdächtig.
Falls Du aber eine einfache Lösung willst (sonst müsstest Du viel mehr 
schreiben was Du eigentlich machst):

schreib in jede nur einmal:

#include "all.h"

und in all.h packst Du dann Deine Liste.

von Dennis S. (eltio)


Lesenswert?

Peter II schrieb:
> warum muss den eine neu Header datei in jeder C datei sein?
Hmm... darauf habe ich leider keine Antwort. Schlechte Angewohnheit?

dumdi dum schrieb:
> Mit 15 Headerdateien und wachsend scheint eher etwas schief zu laufen.
Okay, dass es sinnlos ist wie ich es mache habe ich begriffen. Aber sind 
denn 15 Headerdateien an sich ungewöhnlich? Ich habe in jeder C-Datei 
nur eine oder zwei Funktionen wenn sie "thematisch" zusammenpassen. Zu 
jeder C-Datei habe ich eine H-Datei erstellt.
Vielleicht als Abschätzung: das Programm hat zur Zeit ca. 2000 LOC mit 
40 Funktionen.

Also Zwischenstand für mich: mach nicht so einen Blödsinn... ;-)

von Karl H. (kbuchegg)


Lesenswert?

Dennis S. schrieb:

> Wie handhabt ihr das in euren Projekten?

Ganz einfach:
Jede C-Datei inkludiert diejenigen und nur diejenigen Header Dateien, 
die sie tatsächlich braucht.

Das verringert dann auch gleich sofort die Abhängigkeiten auf das 
minimal notwendige Mass und erlaubt dann auch make, nur die C-Dateien 
tatsächlich compilieren zu müssen, die tatsächlich von diesem 
Header-File abhängen.

von Peter II (Gast)


Lesenswert?

Dennis S. schrieb:
> Hmm... darauf habe ich leider keine Antwort. Schlechte Angewohnheit?

denke ich auch, man schreibt nur diese rein die gebraucht werden - dann 
sind es oft nur 2 oder 3 stück.

von Karl H. (kbuchegg)


Lesenswert?

Dennis S. schrieb:

> Okay, dass es sinnlos ist wie ich es mache habe ich begriffen. Aber sind
> denn 15 Headerdateien an sich ungewöhnlich?

Kommt auf deine Projektgröße an.
15 Header Files sind für meine Begriffe nichts, was mich groß umhaut. 
Allerdings bestehen meine Projekte auch aus 300 C-Files aufwärts.

> Ich habe in jeder C-Datei
> nur eine oder zwei Funktionen wenn sie "thematisch" zusammenpassen. Zu
> jeder C-Datei habe ich eine H-Datei erstellt.

Ja, ist auch ok. Genau darum gehts: um 'thematisches zusammenpassen', 
bzw. Modulbildung.
Die Funktionen für eine Warteschlange gehören in 1 C-File mit 
zugehörigem H-File. Die Funktionen für, ich erfinde mal was, die 
Steuerung eines Modems gehören in 1 C-File samt zugehörigem H-File. etc. 
etc.
Pro Software Modul macht man 1 C-File (manchmal auch mehrere, wenn die 
Funktionalität des Moduls sehr groß ist) samt zugehörigem H-File.

Aber mit 1 C-File für jede Funktion wärst du weit über das Ziel 
hinausgeschossen. Es geht nicht darum einzelne Funktionen in C-Files 
auszulagern, sondern Funktionalitäten(!) in Module auszulagern. In sich 
abgeschlossene Einheiten, die sich im besten Fall wiederverwenden 
lassen.

von Karl H. (kbuchegg)


Lesenswert?

> Hmm... darauf habe ich leider keine Antwort. Schlechte Angewohnheit?

Eher - Arbeit für nichts.

von Dennis S. (eltio)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Eher - Arbeit für nichts.

Nun ja... wenigstens habe ich es gemerkt! ;-)
Also vielen Dank zusammen.

Gruß Dennis

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.