Gast
#1411278
Hallo, was ist richtig: xxx.c:
1 | |
xxx.h:
1 | |
2 | |
3 | |
4 | |
oder: xxx.c:
1 | |
2 | |
3 | |
4 | |
xxx.h:
1 | |
|
Anzeige
|
Headerdatei und C Datei: includes
Gast
#1411278
Hallo, was ist richtig: xxx.c:
xxx.h:
oder: xxx.c:
xxx.h:
Gast
#1411286
beides geht variante 1 gefällt mir generell besser
Gast
#1411290
probier's aus. je nach einstellungen wird dein compiler bei v2 schreine :-)
Gast
#1411291
oops sorry, hab' mich verlesen ;-)
Gast
#1411293
Ok danke ich nutze bereits Variante 1. Finde ich auch übersichtlicher.
Gast
#1411352
ich habe in einer Headerdatei eine enum deklariert. Diese ist allerdings 2 mal per include eingebunden, und jetzt hagelts redeclaration Fehler. Wie kann ich so was vermeiden?
Gast
#1411359
Indem du folgendes an den anfang und ende deiner header datei schreibst: #ifndef FILE_H_ #define FILE_H_ # Deine Sachen #endif Damit verhinderst du mehrfaches inkludieren desselben headers. FILE_H_ ist im Prinzip beliebig, muss aber fuer jede header datei unterschiedlich sein.
Gast
#1411367
hmm danke nur jetzt kommt immer noch was von multiple definition in ner interrupt routine.
Gast
#1411383
>hmm danke nur jetzt kommt immer noch was von multiple definition in ner >interrupt routine. Haben die WinAVR-Header-Dateien nicht auch entsprechende Möglichkeiten der Abfrage, ob sie schin eingefügt wurden? Das muss man halt in sämtlichen Dateien konsequent machen. Oder Variante 3: xxx.c:
xxx.h:
Generell: In einem Header File sollten nur die Includes rein, die für dieses Header File notwendig sind. Nicht mehr. Machst du dort einen Rundumschlag, dann drängst du dem Verwender dieses Include Files zusätzliche #include auf, die der vielleicht gar nicht haben will. Beispiel: Wenn ich dein xxx.h verwende
dann kriege ich alleine durch den #include "xxx.h" den Header interrupt.h mit hinein, den ich weder benötige noch dort haben will. Wenn jedes File, *.c oder *.h, immer nur die #include macht, die es tatsächlich braucht, hast du kürzest mögliche Compilezeit und auch die Wartung wird einfacher, weil es keine Überraschungen gibt.
Gast
#1411476
Und wie mache ich es, wenn ich z.B. #include <inttypes.h> in der c und h Datei brauche? Frank K. schrieb: > Und wie mache ich es, wenn ich z.B. > #include <inttypes.h> > in der c und h Datei brauche? Dann bindest du diesen Header als erstes im c-File ein ;-)
Gast
#1411590
also dann doch lieber die Library Header direkt im C File includen.
Gast
#1411637
Normalerweise bindest du den Header sowieso in die zugehörige C-Datei ein, damit die Deklarationen im Header bzw. die Definitionen in der C-Datei vom Compiler geprüft werden können. Dann reicht es im Header zu inkludieren. Beispiel xyz.c und xyz.h brauchen #include <inttypes.h>: xyz.h:
xyz.c:
Gast
#1411642
Ok also alles was in c und h gebraucht wird in den Header includen. Und wo ist jetzt der Unterschied zwischen: #ifndef FILE_H_ #define FILE_H_ und #ifndef XXX_H_INCLUDED #define XXX_H_INCLUDED
Gast
#1411649
Garkeiner, die Funktion ist die selbe. FILE_H_ und XXX_H_INCLUDED sind lediglich Präprozessor-Symbole, auf deren Nicht-Existenz mit #ifndef geprüft wird. Ist das Symbol nicht definiert, wird es mit #define definiert und alles bis zum #endif in die aufrufende Datei inkludiert. Damit ist das Symbol in der aufrufenden Datei deklariert und der inkludierte Header kann in derserlben datei nicht nocheinmal inkludiert werden (dein ursprüngliches problem). Du kannst diesen Symbolen im Prinzip beliebige Namen geben. Nur muss in jeder Header-Datei ein anderer Name verwendet werden (vgl. obige Ausführung). Üblicherweise konstruiert man daher den Namen aus dem Dateinamen des Headers unter benutzung der erlaubten Zeichen. Du musst darauf Achten, dass der Name möglichst einzigartig ist, da er sonst mit in anderen Headern definierten Symbolen oder Makros in Konflikt graten kann. Beispiel: xyz.h:
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|