Forum: Mikrocontroller und Digitale Elektronik XC8-const nicht konstant?


von Mike (Gast)


Lesenswert?

Hallo,
ich steige gerade in die Programmierung eines PIC18 mit dem XC8-Compiler 
ein.

Ich möchte eine Stringvariable mit 10 byte definieren;
1
    
2
const unsigned int size=10;
3
char text[size];

Leider scheint der Compiler das nicht zu mögen:

main.c:20: error: element count must be constant expression

Wieso das? ich habe doch size explizit als konstant definiert. Muss ich 
doch wieder mit #define arbeiten? Mit dem Microsoft Compiler wird obiger 
Ausdruck problemlos akzeptiert.

Gruß

Mike

von Arc N. (arc)


Lesenswert?

ist C++ aber nicht C. Innerhalb einer Funktion 1) mag das in C so 
aussehen als ob es funktionieren würde, wäre aber ein 
Variable-Length-Array.
Edit: Also entweder mit Defines arbeiten oder mit enums...

1)
[c]
void test() {
   const int i = 10;
   int array[i];
}

: Bearbeitet durch User
von B. S. (bestucki)


Lesenswert?

Der XC8 ist ein C89 Compiler und C89 kennt keine Variable-Length-Arrays.

In C ist eine mit const definierte Variable immer noch eine Variable und 
keine Konstante.

Mike schrieb:
> Muss ich doch wieder mit #define arbeiten?
Ja

: Bearbeitet durch User
von Mike (Gast)


Lesenswert?

> In C ist eine mit const definierte Variable immer noch eine Variable und
> keine Konstante.
OK, wieder etwas dazugelernt.
Belegt eine const-Variable dann auch Speicherplatz im RAM?

von Crypto-Opa (Gast)


Lesenswert?

Mike schrieb:
> Belegt eine const-Variable dann auch Speicherplatz im RAM?

Im Prinzip ja. Aber der Optimierer kann sie unter bestimmten Umständen 
"vernichten", da sie nicht benötigt wird. Dazu muss sie aber "static" 
oder lokal sein oder der Compiler macht das mit einem 
Link-Time-Optimizer.

von Max H. (hartl192)


Lesenswert?

Der XC8 speichert die Konstanten im Flash.

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.