Markus schrieb:
> menu.c, menu.h
> darin sind u. a. 2 structs definiert.
Wo jetzt, im menu.c oder menu.h?
>
1 | > typedef struct A { struct *B; ... } A;
|
2 | >
|
> und
>
1 | > typedef struct B { struct *A; uint8_t var; ...} B;
|
2 | >
|
>
> Ich brauche also eine forward declaration. Soll die ins header-file?
Die forward declaration wird für die Deklaration der structs benötigt.
Also muss es auch dahin, wo die structs deklariert werden. Es macht
keinen Sinn, eine forward declaration irgendwo in einen Header zu
packen, wenn die eigentlichen Deklaration nicht auch dort sind.
> Brauche ich im .h-File #ifndef ..#endif Direktiven?
Musst du wissen. Es ist aber üblich, den kompletten Inhalt einer
.h-Datei in ein ifdef einzuschliessen in der Form:
1 | #ifndef MEINHEADER_H
|
2 | #define MEINHEADER_H
|
3 |
|
4 | ...
|
5 |
|
6 | #endif
|
Dabei ist MEINHEADER_H ein Symbol, das nur in dieser Datei vorkommt. Das
sorgt dafür, dass der Inhalt ignoriert wird, falls der Header mehrmals
in der selben Datei inkludiert wird.
> Und wo muss ich die
> #include <avr/io.h> Direktive (für die Definition des uint8_t-Datentyps)
> einfügen?
uint8_t wird (wie auch die anderen Standard-Typen) in stdint.h
definiert. Und ein #include muss an den Anfang der Datei, in der es
gebraucht wird.
> lcd.c, lcd.h
> ist es sinnvoll Definitionen von Konstanten wie #define LCD_RS PD5 im
> lcd.c, lcd.h oder gar im main.c zu definieren?
Musst du wissen. Das #define ist nur dort wirksam, wo es im Text steht.
Wird es in mehreren .c-Dateien gebraucht, dann muss es in eine .h-Datei,
die von allen diesen .c-Dateien inkludiert wird.
> main.c, main.h
> wie muss ich nun die menu.h und lcd.h (oder die files menu.c und
> menu.c?) in die main.c (oder main.h?) einbinden?
Mit #include… Und eine .c-Datei wird nicht inkludiert, Punkt. Für einen
Anfänger kann der letzte Satz ruhig als Dogma so stehen bleiben.