PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktion als Rückgabewert einer Funktion?



Jaecko
08.09.2008, 09:15
Moin.

Um ein Programm effizienter zu machen, bin ich auf der Suche nach einer Möglichkeit, den Rückgabewert einer Funktion zu verwenden, um eine bestimmte andere Funktion zu verwenden.

Hintergrund: In einer Funktion wird eine State-Machine bearbeitet. Darin soll dann je nach Zustand eine andere Funktion ausgeführt werden.
Um Speicher zu sparen, soll dann die State-Machine-Funktion davor beendet werden, so dass die anderen Funktionen dann aus der main() raus gestartet werden.

Bisher ist es so, dass der Rückgabewert der Statemachine mit if-Anweisungen ausgewertet wird... geht zwar, aber dann bin ich wieder nicht in der main().

Ich meinte mal was gelesen zu haben, dass man einer "Variable" die Adresse einer Funktion zu weisen kann und durch Variable() dann starten kann.

Alt:
In der State Machine:
if (state == SetTime) { return (39); }

In der main():
fktNr = StateMachine();
if (fktNr == 39) { Timer_SetTime(); }


Neu: In der State-Machine soll die Zuweisung in dem Stil erfolgen:


if (state == SetTime) { xFunction = Timer_SetTime; }
....
return (xFunction);


Die main() sollte dann so aussehen:



int main(void)
{
while(1)
{
xFunction = StateMachine();
xFunction();
}
}


Liefert die State-Machine keine Funktion zurück, also soll nichts getan werden, müsste die Funktion eben "leer" sein.

Nur krieg ich das nicht soganz hin. Also wie genau müsste dann xFunction deklariert/definiert werden und wie siehts dann da mit dem Aufruf aus?

mfG

sternst
08.09.2008, 10:25
Am besten definierst du erstmal einen neuen Typ, das spart gerade bei Funktionszeigern eine Menge Tipparbeit.


typedef void(*fptr_t)(void);


fptr_t StateMachine ( void ) {
...
return Timer_SetTime;
...
}


int main ( void ) {

fptr_t nextState;
...
nextState = StateMachine();
nextState();
...
}