Forum: Mikrocontroller und Digitale Elektronik Constant value in Header-File definieren


von Daniel P. (seraphim) Benutzerseite


Lesenswert?

Hallo!

Ich habe in einem Header-File eine globale Variable definiert um die 
Längen mehrerer Vektoren festzulegen. Allerdings verlangt der Compiler, 
dass 'length' einen konstanten Wert haben muss. Ich benutze globale 
Variable auch nur ungern, aber in diesem Fall muss es leider sein.

Fehlermeldung:
cc0028:  error: expression must have a constant value
extern fract16 coeff[length];
1
extern const   int length=5;
2
extern   fract16 coeff[length];

Ich bin nicht so der C-Kenner, aber mein Fehler erscheint mir nicht ganz 
so logisch, Euch ja vielleicht schon.

Ich bedanke mich bereits jetzt für Eure Hilfe.

Daniel

von Johannes M. (johnny-m)


Lesenswert?

Daniel Pfefferkorn wrote:
> Fehlermeldung:
> cc0028:  error: expression must have a constant value
> extern fract16 coeff[length];
>
>
1
> extern const   int length=5;
2
> extern   fract16 coeff[length];
3
>
wenn Du ein Array anlegen willst, dann muss dessen Länge konstant UND 
zum Zeitpunkt des Compilierens bekannt sein! Da ändert auch die 
Deklaration mit "const" nichts dran. Der Ausdruck in der eckigen Klammer 
muss ein Zahlenwert sein. Und den Wert Deines "length" kennt der 
Compiler nicht...

von Johannes M. (johnny-m)


Lesenswert?

Das einzige, was Du an der Stelle sinnvollerweise machen könntest, wäre 
eine Präprozessor-Anweisung (Makro)
1
#define LENGTH 5
2
//...
3
extern fract16 coeff[LENGTH];

von Daniel P. (seraphim) Benutzerseite


Lesenswert?

Johannes M. wrote:
> Das einzige, was Du an der Stelle sinnvollerweise machen könntest, wäre
> eine Präprozessor-Anweisung (Makro)
>
1
> #define LENGTH 5
2
> //...
3
> extern fract16 coeff[LENGTH]
4
>

Funktioniert leider nicht, denn die Idee hatte ich auch schon.

Das Ergebnis:

"hall.h", line 44: cc0017:  error: expected a "]"
  extern fract16 coeff[length];
                       ^

"hall.h", line 44: cc0169:  error: expected a declaration
  extern fract16 coeff[length];

von Johannes M. (johnny-m)


Lesenswert?

OK, erstens fehlte in meinem Posting ein ";" nach der Deklaration, und 
zweitens solltest Du vielleicht mal das posten, was Du jetzt geschrieben 
hast.

EDIT: Nur so als Anmerkung: C ist Case-sensitiv. "LENGTH" ist nicht 
gleich "length"...

von Daniel P. (seraphim) Benutzerseite


Lesenswert?

Hab es jetzt nochmal versucht und siehe da, es geht. Hab vorher wohl 
irgendeinen dummen Fehler gemacht.

Mit
1
#define LENGTH 5
2
extern   fract16 coeff[LENGTH];

geht es.


UUPS: Jetzt weiß ich auch, welchen Fehler ich gemacht habe.

Ich hatte vorher
1
#define LENGTH 5;
 geschrieben.

Und das Semikolon ... also nein, jetzt schäme ich mich.

Danke für Deine überaus schnelle Hilfe!

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.