Peter II schrieb:
> er hat aber geschrieben, das er es schon "oben" hingeschrieben hat.
Hat er nicht, er hat nur einen Versuch einer Vorwärtsdeklaration dort
untergebracht.
Das typedef hat nichts innerhalb einer Funktion verloren, und es
gehört vollständig --d.h. nicht als "Vorwärtsdeklaration"-- vor die
erste Stelle, an der es genutzt wird.
Beim oben geposteten Codefragment also ganz an den Anfang, nocht vor
die Funktion can_send_message.
Die Struktur, die mit dem typedef genutzt wird, kann eine namenlose
Struktur bleiben,
1 | typedef struct
|
2 | {
|
3 | uint16_t id;
|
4 | uint8_t rtr;
|
5 | uint8_t length;
|
6 | uint8_t data[8];
|
7 | } CANMessage;
|
ist also zulässig.
Soll aus irgendwelchen Gründen die Struktur zuätzlich ohne typedef
genutzt werden, dann kann ihr noch ein Name verpasst werden:
1 | typedef struct CANMessage_struct
|
2 | {
|
3 | uint16_t id;
|
4 | uint8_t rtr;
|
5 | uint8_t length;
|
6 | uint8_t data[8];
|
7 | } CANMessage;
|
*Aber:* Das muss alles vor dem allerersten Gebrauch geschehen, also
vor der Deklaration und erst recht der Definition von Funktionen oder
Variablen des Typs.