Warum ist das hier für den gcc nicht const?

Gast #177735
Hallo,

nahcdem ich nun einige Zeit mit dem Menu rumexperimentiert habe,
verzweile ich im Moment etwas am gcc - oder an mir.

Wieso ist bei dem beigefügten Code diese Fehlermeldung sinnvoll?
IMHO ist das alles doch const.

Code im Anhang!

Compiling: menu_neu.c
avr-gcc -c -mmcu=atmega16 -I. -g   -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=menu_neu.lst  -std=gnu99
-Wp,-M,-MP,-MT,menu_neu.o,-MF,.dep/menu_neu.o.d -g menu_neu.c -o
menu_neu.o
menu_neu.c:45: error: initializer element is not constant
menu_neu.c:45: error: (near initialization for `menus[0]')
menu_neu.c:46: error: initializer element is not constant
menu_neu.c:46: error: (near initialization for `menus[1]')
menu_neu.c:47: error: initializer element is not constant
menu_neu.c:47: error: (near initialization for `menus[2]')
menu_neu.c:48: error: initializer element is not constant
menu_neu.c:48: error: (near initialization for `menus[3]')
menu_neu.c:49: error: initializer element is not constant
menu_neu.c:49: error: (near initialization for `menus[4]')
menu_neu.c:50: error: initializer element is not constant
menu_neu.c:50: error: (near initialization for `menus[5]')
menu_neu.c:51: error: initializer element is not constant
menu_neu.c:51: error: (near initialization for `menus[6]')
menu_neu.c:52: error: initializer element is not constant
menu_neu.c:52: error: (near initialization for `menus[7]')
menu_neu.c:53: error: initializer element is not constant
menu_neu.c:53: error: (near initialization for `menus[8]')
menu_neu.c:54: error: initializer element is not constant
menu_neu.c:54: error: (near initialization for `menus[9]')
menu_neu.c:55: error: initializer element is not constant
menu_neu.c:55: error: (near initialization for `menus[10]')
menu_neu.c:56: error: initializer element is not constant
menu_neu.c:56: error: (near initialization for `menus[11]')
menu_neu.c:58: error: initializer element is not constant
menu_neu.c:58: error: (near initialization for `menus[12]')
make.exe: *** [menu_neu.o] Error 1
Angehängte Dateien:
Gast
Weil die Deklarationen der referenzierten Objekte (Hauptmenue etc.)
nur in einem Kommentar stehen.

Außerdem ist Dein menuename[] Array so nicht sehr sinnvoll: Du hast
das Array selbst im Progmem, die Strings, die drinstehen aber nicht.
Siehe (avr-libc) FAQ.
Gast
Hallo Jörg,

erstmal Danke für den Tip mit den Strings, hatte da wohl eine
Kleinigkeit vergessen.

Selbst wenn ich folgendes in das Headerfile schreibe und somit die
Deklaration in einem abhacke, passsiert das gleiche, wie oben. Dem gcc
ist das immer noch nicht const genug - und ich verzweifel!!

Gruß Marcus

PS: Liegt dieses Menü wirklich im Flash? Ich bin mir da nicht soo
sicher.
Angehängte Dateien:
Gast
Marcus,

Ich weiß nicht, ob es damit zusammenhängt, aber brauchst Du denn
'const static ...' oder reicht auch 'const ...' alleine aus? (Ich
kann mir das mit dem static einfach nicht merken)

Ja, das array menuname liegt wirklich im flash. Aber nur das array mit
den pointern zu den Strings. Die Strings selber liegen im RAM. Siehe
FAQ.

Volkmar

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.