Guten Morgen,
ich habe in einem struct einen Funktionszeiger auf eine Funktion, die
den struct als Parameter übergeben bekommt:
1 | typedef struct IconData_s
|
2 | {
|
3 | void (*fcn) (IconData_t);
|
4 | uint8_t slot;
|
5 | int8_t thisState;
|
6 | int8_t lastState;
|
7 | }
|
8 | IconData_t;
|
Das funktioniert. Die Funktion läßt sich beim Iterieren über das struct
array aufrufen.
Will ich stattedessen eine Funktion mit Funktionszeiger als Argument
aufrufen, schlägt der Build fehl:
1 | typedef struct IconData_s
|
2 | {
|
3 | void (*fcn) (IconData_t *);
|
4 | uint8_t slot;
|
5 | int8_t thisState;
|
6 | int8_t lastState;
|
7 | }
|
8 | IconData_t;
|
Stattdessen muß ich mit einem "incomplete type struct" hantieren:
1 | struct IconData_s;
|
2 | typedef struct IconData_s IconData_t;
|
3 |
|
4 | struct IconData_s
|
5 | {
|
6 | void (*fcn) (IconData_t *);
|
7 | uint8_t slot;
|
8 | int8_t thisState;
|
9 | int8_t lastState;
|
10 | };
|
Was ist für den Compiler (hier: ARM-GCC) der große Unterschied?