[ANSI C] Function Pointers declareren

Pagina: 1
Acties:

  • terabyte
  • Registratie: September 2001
  • Laatst online: 06-07-2025

terabyte

kan denken als een computer

Topicstarter
Inleiding -- kan overgeslagen worden wanneer dit niet als QuickFix topic beschouwd wordt
Ik ben bezig met de implementatie van een finite state machine (niet- deterministische eindige automaat - NEA). Er zijn verschillende manieren om dit te doen, en mijn voorkeur ging uit naar een event-driven model, waarbij elke verandering van de state een event is, wat door een bepaalde functie wordt afgehandeld.

Ik heb op papier een mooie NEA ontworpen en ik ben nu toe aan de implementatie fase. Elke vertex van de graaf is een functie, en elke edge in de graaf is een invoerwaarde voor de automaat. De invoer bestaat uit steeds 1 char.

De brakke code

Ik maak gebruik van function pointers om de implementatie zo simpel mogelijk te houden, maar gaat helaas al mis bij definities in de header file!

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/* StateMachine is een structuur waar de pointer naar de huidige state in 
wordt opgeslagen. Dit is een forward declaratie, anders werkt die 
volgende typedef niet */
typedef struct StateMachine TStateMachine;

/* StateProc is de function pointer die gebruikt wordt om elke state in de
 automaat de representeren. Argument "StateMachine *sm" bevat de huidige
 state van de automaat, en input is de... input. */
typedef void (*StateProc)(StateMachine * sm, char input);

/* Nu StateProc is gedeclareerd, kan de struct StateMachine verder worden
 gedefinieerd. Misschien worden hier in de toekomst extra velden aan
toegevoegd */
struct StateMachine
{
    StateProc curState;
};



/* de prototypes voor de verschillende states in de automaat (StateProc
 functies) */
void handle_slash(StateMachine * sm, char input);
void handle_error(StateMachine * sm, char input);
void handle_alphanumeric(StateMachine * sm, char input);
void handle_close_request(StateMachine * sm, char input);
void handle_acknowledgement(StateMachine * sm, char input);


De compiler (GCC 3.3) zegt bij de declaratie van de function pointer en de prototypes van de verschillende functies het volgende:

error: parse-fout before '*' token

Dit gebeurt met en zonder de compiler opties "-Wall -pedantic -ansi -O2"
Ik zie de fout niet!

"UTFS! (8> "
Ik heb de FAQ gelezen, de search gebruikt, etc. In de FAQ staat dat "QuickFix" topics niet zijn toegestaan, voordat dit als QuickFix topic beschouwd wordt ;(, wil ik er bij zeggen dat discussies over mooie implementaties van NEA's wat mij betreft on-topic zijn :*).

[ Voor 3% gewijzigd door terabyte op 05-12-2003 13:10 . Reden: layout ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Je maakt een typedef voor je statemachine struct, maar in de typedef voor je StateProc gebruik je weer je originale struct. Dus :


C:
1
typedef void (*StateProc)(struct StateMachine * sm, char input);


of

C:
1
typedef void (*StateProc)( TStateMachine * sm, char input);


:)

[edit]
Waarom gebruik je je stateproc type niet voor de declaraties van de functies zelf ?

[ Voor 14% gewijzigd door farlane op 05-12-2003 13:43 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.