Forum: Compiler & IDEs Warum ist das hier für den gcc nicht const?


von Marcus M. (Gast)


Angehängte Dateien:

Lesenswert?

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

von Jörg Wunsch (Gast)


Lesenswert?

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.

von Marcus M. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Volkmar (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.