Forum: Mikrocontroller und Digitale Elektronik header in header


von Stefan (Gast)


Lesenswert?

Hallo.

Ich möchte für ein AVR-Projekt eine zentrale header-Datei anlegen, in 
der alle notwendigen includes vorgenommen werden.
(Bsp.: "sleep.h", "stdint.h", "avr/io.h"....)
Dieser Header soll dann in alle Module eingebunden werden.

Wiederspricht irgendetwas dieser Praxis? Ich meine mich daran zu 
erinnern dass man das net machen soll...
...weiss aber nichtmehr warum.

Kann mir da jemand helfen?

von Karl H. (kbuchegg)


Lesenswert?

Stefan schrieb:
> Hallo.
>
> Ich möchte für ein AVR-Projekt eine zentrale header-Datei anlegen, in
> der alle notwendigen includes vorgenommen werden.
> (Bsp.: "sleep.h", "stdint.h", "avr/io.h"....)
> Dieser Header soll dann in alle Module eingebunden werden.
>
> Wiederspricht irgendetwas dieser Praxis?

Das ist die Rundumschlagmethode

> Ich meine mich daran zu
> erinnern dass man das net machen soll...


Auf einem AVR ist es höchst wahrscheinlich egal, weil du nicht mehr als 
sagen wir mal 6 bis maximal 10 Header haben wirst. D.h. von der 
Compiliergeschwindigkeit spielt das kaum eine Rolle

> ...weiss aber nichtmehr warum.

Weil es dem halben Mechanismus des getrennten Compilierens einzelner *.c 
Files konträr läuft. De Facto hast du damit in allen *.c Files alle 
Header includiert, ob du sie im jeweiligen File brauchst oder nicht. Bei 
einer Änderung in einem einzigen Header File wird dir Make daher alle 
*.c Files nachcompilieren. Und das ist dann, wenn Projekte größer werden 
(>100 Files) nicht mehr Sinn der Sache.

Aber: wozu soll das gut sein?
Die 5 bis 6 Header, die man auf einm AVR in einem *.c File includiert, 
hat man doch auch zu Fuss in unter 30 Sekunden hingeschrieben. Meistens 
ist es so, dass solche Ideen von Programmierern kommen, die den 
Überblick verloren haben und daher einfach einen Rundumschlag machen, in 
der Hoffnung, dass sich dann alles von selbst erledigt.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Karl heinz Buchegger schrieb:
> Überblick verloren haben und daher einfach einen Rundumschlag machen, in
> der Hoffnung, dass sich dann alles von selbst erledigt
Spätestens dann ist das Projekt doch auch erledigt ;P

von Stefan (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Die 5 bis 6 Header, die man auf einm AVR in einem *.c File includiert,
> hat man doch auch zu Fuss in unter 30 Sekunden hingeschrieben.


Das stimmt. ABER:

Ich habe in der Header-Datei eigene Datentypen definiert, die ich in 
jedem .c File brauche (typedef unsigned char UC; ....).
Hier bleibt mir ja tatsächlich keine andere Wahl als den <stdint.h> 
-Header in meinen globalen-Header zu includieren, oder?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan schrieb:
> Ich habe in der Header-Datei eigene Datentypen definiert, die ich in
> jedem .c File brauche (typedef unsigned char UC; ....).

Gewöhn Dir das einfach gleich wieder ab. Wozu wohl gibt es die 
Datentypen in stdint.h, wozu sind uint8_t und Konsorten eingeführt 
worden?

von Karl H. (kbuchegg)


Lesenswert?

Stefan schrieb:

> Ich habe in der Header-Datei eigene Datentypen definiert, die ich in
> jedem .c File brauche (typedef unsigned char UC; ....).

schlecht.
Es gibt dafür Standardtypen

> Hier bleibt mir ja tatsächlich keine andere Wahl als den <stdint.h>
> -Header in meinen globalen-Header zu includieren, oder?

Erfahrungsgemäss ist es so, dass Header in Header welcher seinerseits 
wieder einen Header includiert, der ...
zu schwer zu durchschauenden Abhängigkeiten führt. Du includierst dann 
in gutem Glauben einen Header in deinem *.c File und plötzlich prodziert 
der 'Error-Generator des Compilers' nur noch Errors. Es ist dann gar 
nicht mehr so einfach das Geflecht aus includes wieder 
auseinanderzunehmen um festzustellen welche Header Reihenfolge die 
richtige gewesen wäre.


Wenn ein Header File etwas benutzt, was in einem anderen Header 
definiert wird, dann ist es ok (und soll auch so sein), dass dieses *.h 
File den anderen Header inkludiert. Aber solche Rundumschlagmethoden 
machen oftmals mehr Ärger als sie bringen.

Denn es kommt noch hinzu: Das alles braucht doch keine Zeit beim 
Code-Schreiben. Du sitzt viele Stunden an einem Code-Projekt bis es 
fertig ist. Die 30 Sekunden, die du pro *.c File brauchst um dort alle 
Header zu includen die notwendig sind, die sind nicht der große 
Zeitbringer um ein Projekt schneller fertig zu bekommen :-)

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.