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?
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.
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
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?
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.