Designfrage mit static Variablen



Hallo allerseits,

ich muss eine Software (Sprache ist c) neu designen, bei der bisher
die gesamte Kommunikation der Module ueber Globals lief. Das will ich
aendern.

Es gibt ein Modul terminal.c, seine terminal()-Funktion wird von
main() periodisch aufgerufen. Das Terminal hat innere Zustaende (z.B.
lastMenu, currMenu, currKey usw.), die packe ich jetzt alle in die
Struktur S_MENU_STATE.

Von einem zum anderen Aufruf von terminal() (Aufruf erfolgt von
main()) muss der Zustand erhalten bleiben. Dies wurde ja frueher ueber
Globals erreicht.
Ich koennte jetzt zwar in main() eine globale Variable S_MENU_STATE
menuState definieren, einen Pointer darauf S_MENU_STATE *pMenuState =
&menuState, und diesen Pointer dann in terminal(S_MENU_STATE
*pMenuState) uebergeben.
Ich moechte aber nicht so gerne, dass sich main() um diesen Zustand
von terminal() kuemmert. Ausserdem moechte ich nicht soviele Parameter
uebergeben (SW ist embedded).

Jetzt habe ich folgende Idee: Ich definiere den Zustand in terminal.c
als statische globale Variable (+ einen Zeiger darauf)
// terminal.c
static S_MENU_STATE menuState;
static S_MENU_STATE *pMenuState = &menuState;

Durch das static bleibt doch der Zustand zwischen 2
terminal()-Aufrufen erhalten, oder?

Der Witz ist naemlich, dass terminal() seinerseits auch wieder aus
Unterfunktionen besteht, die den Zustand bekommen/veraendern muessen.

Ist das ein plausibler (der plausible) Weg?
Wie halte ich generell in c (oder einer anderen prozeduralen
Programmiersprache mit Zeigern) den Zustand eines Untermoduls lokal?
Bin da wohl ein wenig von den OOP-Sprachen verwoehnt.



Viele Gruesse


Johannes


.



Relevant Pages