Flexible Menüstruktur und Initialisierung (in C)?

Gast #5346033
Lesenswert?
• ▲
▼
Es gibt zwar schon einige Threads zum Thema Menüstruktur, z.B. 
Beitrag "Programmieren einer Menüstruktur in C" oder der Rat, mal in die 
Quellen vom AVR Butterfly zu schauen 
(http://ww1.microchip.com/downloads/en/DeviceDoc/AVRButterfly_application_rev07.zip).

Ich suche aber einen Ansatz, um die Struktur des Menüs flexibel zu 
gestalten, d.h. optionale Einträge/Elemente in Abhängigkeit von 
(Software-)Modulen zu haben.

Beispiel:
1
Funktionen
2
Einstellungen
3
  Display
4
    Kontrast
5
    Helligkeit
6
    Anzeigedauer
7
[
8
  Audio
9
    Ein
10
    Frequenz
11
    Lautstärke
12
]
13
  LetzteEinstellung
14
LetzterMenüEintrag

D.h. möglichst getrennt vom Hauptprogramm (und möglichst ohne #ifdefs), 
soll im optionalen Modul "Audio" das Menü erweitert werden (vor 
LetzteEinstellung, d.h. Einfügen).
Geht sowas irgendwie statisch (und constant)? Mir fällt nichts ein, denn 
es müssten Indizes für die Menüeinträge bzw. die Verkettung vom 
Präprozessor beeinflusst werden.

Oder muss die Struktur dafür dynamisch initialisiert und ggf. verändert 
werden, also etwas wie
1
Menu_init();
2

3
// und im Modul dann etwa
4

5
Menu_append(AUDIO, SETTINGS);

Der Nachteil ist dann wohl, dass nicht mehr alle structs "auf einen 
Schlag" initialisiert werden können, und es stattdessen einige 
Funktionsaufrufe geben muss, obwohl alle Daten eigentlich const sein 
könnten.

Oder kann man Variablen irgendwie re-initialisieren, um z.B. einen 
next-Zeiger in der "Display"-Menüeintrags-Struktur auf AUDIO 
"umzuhängen" (und den in AUDIO auf LetzteEinstellung?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.